{"version":3,"file":"index.cjs","names":["variantMap","AccordionPrimitive","ChevronDownIcon","Component","X","sizeMap","variantMap","SelectPrimitive","sizeMap","ChevronDown","Check","SelectContent","SelectPrimitive","DayPicker","variantMap","React","variantMap","React","RechartsPrimitive","CartesianGrid","React","ChevronUpIcon","ChevronDownIcon","React","autoUpdate","React","ChevronLeft","ChevronRight","React","ChevronUp","ChevronDown","React","X","RadixSeparator","ChevronUp","ChevronDown","React","React","Tooltip","React","React","getWidthOfData","getWidthOfGroup","findNearestSnapPosition","getSnapPositions","X_AXIS_PADDING","CHART_CONTAINER_BOTTOM_MARGIN","getWidthOfGroup","getWidthOfData","getSnapPositions","findNearestSnapPosition","RechartsAreaChart","YAxis","Area","XAxis","React","CHART_HEIGHT","CHART_CONTAINER_BOTTOM_MARGIN","RechartsAreaChart","YAxis","Area","XAxis","React","getWidthOfData","getPadding","getSnapPositions","BAR_GAP","BAR_CATEGORY_GAP","BAR_INTERNAL_LINE_WIDTH","BAR_RADIUS","CHART_CONTAINER_BOTTOM_MARGIN","getPadding","getWidthOfData","getSnapPositions","RechartsBarChart","YAxis","Bar","XAxis","React","BAR_GAP","BAR_CATEGORY_GAP","BAR_INTERNAL_LINE_WIDTH","BAR_RADIUS","CHART_HEIGHT","CHART_CONTAINER_BOTTOM_MARGIN","RechartsBarChart","YAxis","Bar","XAxis","React","React","getPadding","X_AXIS_HEIGHT","getPadding","RechartsBarChart","XAxis","Bar","YAxis","React","CHART_CONTAINER_BOTTOM_MARGIN","getWidthOfGroup","getWidthOfData","getSnapPositions","findNearestSnapPosition","RechartsLineChart","YAxis","Line","XAxis","RechartsLineChart","YAxis","Line","XAxis","React","MINI_ELEMENT_SPACING","transformDataForChart","getRecentDataThatFits","DATA_KEY","getRecentDataThatFits","transformDataForChart","DATA_KEY","RechartsAreaChart","XAxis","Area","BarChart","XAxis","Bar","getRecentDataThatFits","transformDataForChart","DATA_KEY","RechartsLineChart","XAxis","Line","calculatePercentage","STACKED_LEGEND_BREAKPOINT","MIN_CHART_SIZE","MAX_CHART_SIZE","Pie","Cell","RechartsPieChart","MIN_CHART_SIZE","MAX_CHART_SIZE","Radar","RechartsRadarChart","PolarGrid","PolarAngleAxis","RadialBarChart","PolarGrid","RadialBar","Cell","RechartsScatterChart","XAxis","Scatter","YAxis","Cell","variantMap","React","Checkbox","CheckCheck","Copy","SyntaxHighlighter","vscDarkPlus","Container","renderIcon","Lightbulb","hasRenderableIcon","Fragment","ConversationStarterItem","ArrowUp","ConversationStarter","ThreadItem","DropdownMenu","EllipsisVerticalIcon","Trash2Icon","ThreadListContainer","MenuIcon","SquarePen","Header","ThreadListContainer","React","ChevronLeft","ChevronRight","vscDarkPlus","oneLight","ReactMarkdown","autoExpanded","ChevronUp","ChevronDown","SquareCode","ChevronDown","AlertCircle","CheckCircle2","ChevronDown","Composer","Square","ArrowUp","ThreadContainer","ScrollArea","AssistantMessageContainer","UserMessageContainer","AssistantMessageContent","UserMessageContent","RenderMessage","MessageLoading","MessageLoadingComponent","Messages","MessageProvider","isImageUrl","WelcomeScreen","ChevronDown","autoUpdate","AspectRatio","X","ChevronLeft","ChevronRight","React","LabelPrimitive","Children","React","Container","renderIcon","Lightbulb","hasRenderableIcon","Fragment","ConversationStarterItem","ArrowUp","ConversationStarter","DropdownMenu","EllipsisVerticalIcon","Trash2Icon","MenuIcon","SquarePen","X","Composer","Square","ArrowUp","ThreadContainer","ScrollArea","AssistantMessageContainer","UserMessageContainer","AssistantMessageContent","UserMessageContent","RenderMessage","MessageLoading","MessageLoadingComponent","Messages","MessageProvider","ChevronDown","isImageUrl","WelcomeScreen","Loader2","Check","Copy","Link","Dialog","X","React","Share2","Square","ArrowUp","Square","ArrowUp","Lightbulb","Fragment","ArrowUp","Menu","Plus","PanelLeftClose","PanelLeftOpen","SquarePen","MessageLoading","MessageLoadingComponent","MessageProvider","DropdownMenu","EllipsisVerticalIcon","Trash2Icon","Fragment","BuiltinActionType","Renderer","ChevronDown","ChatProvider","WelcomeMessageRenderer","WelcomeScreen","CustomWelcome","ConversationStartersRenderer","ConversationStarter","MessageLoading","Container","ThreadContainer","ScrollArea","Messages","DefaultComposer","WelcomeMessageRenderer","WelcomeScreen","CustomWelcome","ConversationStartersRenderer","ConversationStarter","MessageLoading","Container","ThreadContainer","Header","ScrollArea","Messages","DefaultComposer","CustomWelcome","MessageLoading","DefaultComposer","variants","Radio","Radio","AccordionPrimitive","ChevronRight","SliderPrimitive","AlertCircle","React","variants","Switch","TabsPrimitive","ChevronLeft","ChevronRight","variantMap","variantMap","React","z","Callout","OpenUICallout","z","CardHeader","OpenUICardHeader","z","CodeBlock","OpenUICodeBlock","z","Image","OpenUIImage","z","ImageBlock","OpenUIImageBlock","z","ImageGallery","OpenUIImageGallery","z","MarkDownRenderer","OpenUIMarkDownRenderer","z","Separator","OpenUISeparator","z","TextCallout","OpenUITextCallout","z","TextContent","z","z","z","z","z","HorizontalBarChart","React","HorizontalBarChartComponent","z","RadarChart","React","RadarChartComponent","z","PieChart","React","PieChartComponent","z","RadialChart","React","RadialChartComponent","z","React","SingleStackedBarChartComponent","z","ScatterChart","React","ScatterChartComponent","z","AreaChartCondensed","React","AreaChartCondensedComponent","z","BarChartCondensed","React","BarChartCondensedComponent","z","LineChartCondensed","React","LineChartCondensedComponent","z","Table","z","React","OpenUITable","OpenUITableHeader","OpenUITableRow","OpenUITableHead","OpenUITableBody","OpenUITableCell","ChevronLeft","ChevronRight","z","TagBlock","OpenUITagBlock","OpenUITag","z","z","Button","OpenUIButton","ACTION_STEPS","z","Button","Buttons","OpenUIButtons","z","z","CheckBoxItem","CheckBoxGroup","React","OpenUICheckBoxGroup","OpenUICheckBoxItem","z","DatePicker","React","OpenUIDatePicker","z","Input","React","OpenUIInput","z","RadioItem","RadioGroup","z","React","OpenUIRadioGroup","OpenUIRadioItem","z","SelectItem","Select","React","OpenUISelect","OpenUISelectTrigger","OpenUISelectValue","OpenUISelectContent","OpenUISelectItem","z","Slider","React","OpenUISliderBlock","z","TextArea","React","OpenUITextArea","z","Input","TextArea","Select","DatePicker","Slider","CheckBoxGroup","RadioGroup","FormControl","OpenUIFormControl","OpenUILabel","OpenUIHint","AlertCircle","z","Buttons","FormControl","FormValidationContext","FormNameContext","z","StepsItem","Steps","z","OpenUISteps","OpenUIStepsItem","FollowUpItem","z","FollowUpBlock","z","FollowUpItem","OpenUIFollowUpBlock","OpenUIFollowUpItem","ListItem","z","ListBlock","z","ListItem","OpenUIListBlock","OpenUIListItem","ChevronRight","z","TextContent","MarkDownRenderer","CardHeader","Callout","TextCallout","CodeBlock","Image","ImageBlock","ImageGallery","Separator","HorizontalBarChart","RadarChart","PieChart","RadialChart","ScatterChart","AreaChartCondensed","BarChartCondensed","LineChartCondensed","Table","TagBlock","Buttons","Steps","ListBlock","FollowUpBlock","z","z","React","z","TextContent","MarkDownRenderer","CardHeader","Callout","TextCallout","CodeBlock","Image","ImageBlock","ImageGallery","Separator","HorizontalBarChart","RadarChart","PieChart","RadialChart","ScatterChart","AreaChartCondensed","BarChartCondensed","LineChartCondensed","Table","TagBlock","Buttons","Steps","ListBlock","FollowUpBlock","Carousel","z","OpenUICarousel","OpenUICarouselContent","OpenUICarouselItem","OpenUICarouselPrevious","ChevronLeft","OpenUICarouselNext","ChevronRight","z","gapMap","alignMap","justifyMap","z","Tabs","z","React","OpenUITabs","OpenUITabsList","OpenUITabsTrigger","OpenUITabsContent","z","Tabs","Carousel","Card","OpenUICard","z","Label","OpenUILabel","z","SwitchItem","SwitchGroup","React","OpenUISwitchGroup","OpenUISwitchItem","z","AccordionItem","Accordion","z","React","OpenUIAccordion","OpenUIAccordionItem","OpenUIAccordionTrigger","OpenUIAccordionContent","z","Tag","OpenUITag","Modal","X","z","OpenUIModal","Card","CardHeader","TextContent","MarkDownRenderer","Callout","TextCallout","Image","ImageBlock","ImageGallery","CodeBlock","Table","BarChartCondensed","LineChartCondensed","AreaChartCondensed","RadarChart","HorizontalBarChart","PieChart","RadialChart","ScatterChart","FormControl","Label","Input","TextArea","Select","SelectItem","DatePicker","Slider","CheckBoxGroup","CheckBoxItem","RadioGroup","RadioItem","SwitchGroup","SwitchItem","Button","Buttons","Tabs","Accordion","AccordionItem","Steps","StepsItem","Carousel","Separator","TagBlock","Tag","z","Tabs","Carousel","OpenUICard","CardHeader","TextContent","MarkDownRenderer","Callout","TextCallout","Image","ImageBlock","ImageGallery","CodeBlock","Separator","Table","BarChartCondensed","LineChartCondensed","AreaChartCondensed","RadarChart","HorizontalBarChart","PieChart","RadialChart","ScatterChart","FormControl","Label","Input","TextArea","Select","SelectItem","DatePicker","Slider","CheckBoxGroup","CheckBoxItem","RadioGroup","RadioItem","SwitchGroup","SwitchItem","Button","Buttons","ListBlock","ListItem","FollowUpBlock","FollowUpItem","Accordion","AccordionItem","Steps","StepsItem","TagBlock","Tag"],"sources":["../src/components/Accordion/Accordion.tsx","../src/internalUtils/ref.ts","../src/hooks/useMultipleRefs.ts","../src/components/_shared/artifact/ArtifactPortalTarget.tsx","../src/components/_shared/artifact/ArtifactOverlay.tsx","../src/components/ThemeProvider/swatches.ts","../src/components/ThemeProvider/defaultTheme.ts","../src/components/ThemeProvider/utils.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../src/components/_shared/artifact/ArtifactPanel.tsx","../src/artifact/Artifact.tsx","../src/components/Button/Button.tsx","../src/components/Buttons/Buttons.tsx","../src/context/LayoutContext.tsx","../src/components/Select/Select.tsx","../src/components/Calendar/utils/helperFn.tsx","../src/components/Calendar/components/helperComponents.tsx","../src/components/Calendar/utils/styles.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Callout/Callout.tsx","../src/components/Card/Card.tsx","../src/components/CardHeader/CardHeader.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Carousel/Carousel.tsx","../src/context/PrintContext.tsx","../src/components/Charts/Charts.tsx","../src/components/Charts/context/SideBarTooltipContext.tsx","../src/components/Charts/hooks/useAutoAngleCalculation.ts","../src/components/Charts/hooks/useCanvasContextForLabelSize.ts","../src/components/Charts/hooks/useExportChartData.ts","../src/components/Charts/hooks/useMaxLabelHeight.tsx","../src/components/Charts/hooks/useMaxLabelWidth.ts","../src/components/Charts/hooks/useTransformKey.tsx","../src/components/Charts/utils/dataUtils.ts","../src/components/Charts/utils/PalletUtils.ts","../src/components/Charts/utils/styleUtils.ts","../src/components/Charts/hooks/useYAxisLabelWidth.tsx","../src/components/Charts/shared/ActiveDot/ActiveDot.tsx","../src/components/Charts/shared/CartesianGrid/cartesianGrid.tsx","../src/components/Charts/shared/DefaultLegend/hooks/useDefaultLegend.ts","../src/components/Charts/shared/DefaultLegend/DefaultLegend.tsx","../src/components/Charts/shared/LineInBarShape/LineInBarShape.tsx","../src/components/Charts/shared/PortalTooltip/FloatingUIPortal.tsx","../src/components/Charts/shared/PortalTooltip/utils/index.ts","../src/components/Charts/shared/PortalTooltip/CustomTooltipContent.tsx","../src/components/Charts/shared/ScrollButtonsHorizontal/ScrollButtonsHorizontal.tsx","../src/components/Charts/shared/ScrollButtonsVertical/ScrollButtonsVertical.tsx","../src/components/Charts/shared/SideBarTooltip/SideBarTooltip.tsx","../src/components/Separator/Separator.tsx","../src/components/Charts/shared/StackedLegend/StackedLegend.tsx","../src/components/Charts/shared/SVGXAxisTick/SVGXAxisTick.tsx","../src/components/Charts/shared/LabelTooltip/LabelTooltip.tsx","../src/components/Charts/shared/XAxisTick/XAxisTick.tsx","../src/components/Charts/shared/YAxisTick/YAxisTick.tsx","../src/components/Charts/utils/AreaAndLine/AreaAndLineUtils.ts","../src/components/Charts/utils/AreaAndLine/common.ts","../src/components/Charts/AreaChart/AreaChart.tsx","../src/components/Charts/AreaChartCondensed/AreaChartCondensed.tsx","../src/components/Charts/utils/BarCharts/BarChartsUtils.ts","../src/components/Charts/BarChart/utils/BarChartUtils.ts","../src/components/Charts/BarChart/BarChart.tsx","../src/components/Charts/BarChartCondensed/BarChartCondensed.tsx","../src/components/Charts/HorizontalBarChart/components/CustomBarShape.tsx","../src/components/Charts/HorizontalBarChart/hooks/useMaxCategoryLabelWidth.tsx","../src/components/Charts/HorizontalBarChart/utils/HorizontalBarChartUtils.ts","../src/components/Charts/HorizontalBarChart/HorizontalBarChart.tsx","../src/components/Charts/LineChart/LineChart.tsx","../src/components/Charts/LineChartCondensed/LineChartCondensed.tsx","../src/components/Charts/utils/AreaAndLine/MiniAreaAndLineUtils.ts","../src/components/Charts/MiniAreaChart/MiniAreaChart.tsx","../src/components/Charts/MiniBarChart/utils/miniBarChartUtils.ts","../src/components/Charts/MiniBarChart/MiniBarChart.tsx","../src/components/Charts/MiniLineChart/MiniLineChart.tsx","../src/components/Charts/PieChart/utils/PieChartUtils.ts","../src/components/Charts/PieChart/PieChart.tsx","../src/components/Charts/RadarChart/utils/index.ts","../src/components/Charts/RadarChart/components/AxisLabel.tsx","../src/components/Charts/RadarChart/RadarChart.tsx","../src/components/Charts/RadialChart/utils/RadialChartUtils.ts","../src/components/Charts/RadialChart/RadialChart.tsx","../src/components/Charts/ScatterChart/components/ScatterDot.tsx","../src/components/Charts/ScatterChart/utils/ScatterChartUtils.ts","../src/components/Charts/ScatterChart/ScatterChart.tsx","../src/components/Charts/SingleStackedBarChart/components/ToolTip.tsx","../src/components/Charts/SingleStackedBarChart/SingleStackedBarChart.tsx","../src/components/CheckBoxGroup/CheckBoxGroup.tsx","../src/components/CheckBoxItem/CheckBoxItem.tsx","../src/components/CodeBlock/CodeBlock.tsx","../src/components/_shared/store/store.tsx","../src/components/CopilotShell/Container.tsx","../src/components/_shared/utils/index.ts","../src/components/CopilotShell/ConversationStarter.tsx","../src/components/CopilotShell/ThreadListContainer.tsx","../src/components/CopilotShell/Header.tsx","../src/hooks/useScrollToBottom.ts","../src/components/Table/Table.tsx","../src/components/MarkDownRenderer/MarkDownRenderer.tsx","../src/components/MessageLoading/MessageLoading.tsx","../src/components/ToolCall/BehindTheScenes.tsx","../src/components/ToolCall/ToolCall.tsx","../src/components/ToolResult/ToolResult.tsx","../src/hooks/useComposerState.ts","../src/components/CopilotShell/components/Composer.tsx","../src/components/CopilotShell/Thread.tsx","../src/components/CopilotShell/WelcomeScreen.tsx","../src/components/CopilotShell/index.ts","../src/components/DatePicker/helpers/context/DatePickerContext.tsx","../src/components/DatePicker/helpers/utils/helperFn.tsx","../src/components/DatePicker/helpers/components/DatePickerRenderer.tsx","../src/components/DatePicker/helpers/components/FloatingDatePickerRenderer.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/FollowUpBlock/FollowUpBlock.tsx","../src/components/FollowUpItem/FollowUpItem.tsx","../src/components/FormControl/context.tsx","../src/components/FormControl/FormControl.tsx","../src/components/FormControl/Hint/Hint.tsx","../src/components/Image/Image.tsx","../src/hooks/useResponsiveContainer.ts","../src/components/ImageBlock/ImageBlock.tsx","../src/components/ImageGallery/GalleryModal.tsx","../src/components/ImageGallery/ImageGallery.tsx","../src/components/Input/Input.tsx","../src/components/Label/Label.tsx","../src/components/ListBlock/ListBlock.tsx","../src/components/ListItem/ListItem.tsx","../src/components/BottomTray/Container.tsx","../src/components/BottomTray/ConversationStarter.tsx","../src/components/BottomTray/ThreadListContainer.tsx","../src/components/BottomTray/Header.tsx","../src/components/BottomTray/components/Composer.tsx","../src/components/BottomTray/Thread.tsx","../src/components/BottomTray/Trigger.tsx","../src/components/BottomTray/WelcomeScreen.tsx","../src/components/OpenUIChat/CustomComposerAdapter.tsx","../src/components/OpenUIChat/ShareThreadModal.tsx","../src/components/OpenUIChat/useShareThread.ts","../src/components/OpenUIChat/ShareThread.tsx","../src/components/OpenUIChat/utils/index.ts","../src/utils/contentParser.ts","../src/components/Shell/components/Composer.tsx","../src/components/Shell/components/DesktopWelcomeComposer.tsx","../src/hooks/useElementSize.ts","../src/components/Shell/Container.tsx","../src/components/Shell/ConversationStarter.tsx","../src/components/Shell/MobileHeader.tsx","../src/components/Shell/Sidebar.tsx","../src/components/Shell/NewChatButton.tsx","../src/components/Shell/ResizableSeparator.tsx","../src/components/Shell/useArtifactResize.ts","../src/components/Shell/Thread.tsx","../src/components/Shell/ThreadList.tsx","../src/components/Shell/WelcomeScreen.tsx","../src/components/Shell/index.ts","../src/components/OpenUIChat/GenUIAssistantMessage.tsx","../src/components/OpenUIChat/GenUIUserMessage.tsx","../src/components/OpenUIChat/withChatProvider.tsx","../src/components/OpenUIChat/ComposedBottomTray.tsx","../src/components/OpenUIChat/ComposedCopilot.tsx","../src/components/OpenUIChat/ComposedStandalone.tsx","../src/components/RadioGroup/RadioGroup.tsx","../src/components/RadioItem/RadioItem.tsx","../src/components/SectionBlock/FoldableSection.tsx","../src/components/SectionBlock/SectionV2.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Slider/Slider.tsx","../src/components/Slider/SliderBlock.tsx","../src/components/Steps/Steps.tsx","../src/components/SwitchGroup/SwitchGroup.tsx","../src/components/SwitchItem/SwitchItem.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tag/Tag.tsx","../src/components/TagBlock/TagBlock.tsx","../src/components/TextArea/TextArea.tsx","../src/components/TextCallout/TextCallout.tsx","../src/components/TextContent/TextContent.tsx","../src/genui-lib/Callout/schema.ts","../src/genui-lib/Callout/index.tsx","../src/genui-lib/CardHeader/schema.ts","../src/genui-lib/CardHeader/index.tsx","../src/genui-lib/CodeBlock/schema.ts","../src/genui-lib/CodeBlock/index.tsx","../src/genui-lib/Image/schema.ts","../src/genui-lib/Image/index.tsx","../src/genui-lib/ImageBlock/schema.ts","../src/genui-lib/ImageBlock/index.tsx","../src/genui-lib/ImageGallery/schema.ts","../src/genui-lib/ImageGallery/index.tsx","../src/genui-lib/MarkDownRenderer/schema.ts","../src/genui-lib/MarkDownRenderer/index.tsx","../src/genui-lib/Separator/schema.ts","../src/genui-lib/Separator/index.tsx","../src/genui-lib/TextCallout/schema.ts","../src/genui-lib/TextCallout/index.tsx","../src/genui-lib/TextContent/schema.ts","../src/genui-lib/TextContent/index.tsx","../src/genui-lib/Charts/Point.ts","../src/genui-lib/Charts/ScatterSeries.ts","../src/genui-lib/Charts/Series.ts","../src/genui-lib/Charts/Slice.ts","../src/genui-lib/helpers.ts","../src/genui-lib/Charts/HorizontalBarChart.ts","../src/genui-lib/Charts/RadarChart.ts","../src/genui-lib/Charts/PieChart.ts","../src/genui-lib/Charts/RadialChart.ts","../src/genui-lib/Charts/SingleStackedBarChart.ts","../src/genui-lib/Charts/ScatterChart.ts","../src/genui-lib/Charts/AreaChartCondensed.ts","../src/genui-lib/Charts/BarChartCondensed.ts","../src/genui-lib/Charts/LineChartCondensed.ts","../src/genui-lib/Table/schema.ts","../src/genui-lib/Table/index.tsx","../src/genui-lib/TagBlock/schema.ts","../src/genui-lib/TagBlock/index.tsx","../src/genui-lib/Action/schema.ts","../src/genui-lib/Button/schema.ts","../src/genui-lib/Button/index.tsx","../src/genui-lib/Buttons/schema.ts","../src/genui-lib/Buttons/index.tsx","../src/genui-lib/rules.ts","../src/genui-lib/CheckBoxGroup/schema.ts","../src/genui-lib/CheckBoxGroup/index.tsx","../src/genui-lib/DatePicker/schema.ts","../src/genui-lib/DatePicker/index.tsx","../src/genui-lib/Input/schema.ts","../src/genui-lib/Input/index.tsx","../src/genui-lib/RadioGroup/schema.ts","../src/genui-lib/RadioGroup/index.tsx","../src/genui-lib/Select/schema.ts","../src/genui-lib/Select/index.tsx","../src/genui-lib/Slider/schema.ts","../src/genui-lib/Slider/index.tsx","../src/genui-lib/TextArea/schema.ts","../src/genui-lib/TextArea/index.tsx","../src/genui-lib/FormControl/schema.ts","../src/genui-lib/FormControl/index.tsx","../src/genui-lib/Form/schema.ts","../src/genui-lib/Form/index.tsx","../src/genui-lib/Steps/schema.ts","../src/genui-lib/Steps/index.tsx","../src/genui-lib/FollowUpItem/index.tsx","../src/genui-lib/FollowUpBlock/index.tsx","../src/genui-lib/ListItem/index.tsx","../src/genui-lib/ListBlock/index.tsx","../src/genui-lib/sectionContentUnion.ts","../src/genui-lib/SectionItem/index.tsx","../src/genui-lib/SectionBlock/index.tsx","../src/genui-lib/unions.ts","../src/genui-lib/Carousel/index.tsx","../src/genui-lib/Stack/schema.ts","../src/genui-lib/Stack/index.tsx","../src/genui-lib/Tabs/schema.ts","../src/genui-lib/Tabs/index.tsx","../src/genui-lib/Card/schema.ts","../src/genui-lib/Card/index.tsx","../src/genui-lib/Label/schema.ts","../src/genui-lib/Label/index.tsx","../src/genui-lib/SwitchGroup/schema.ts","../src/genui-lib/SwitchGroup/index.tsx","../src/genui-lib/Accordion/schema.ts","../src/genui-lib/Accordion/index.tsx","../src/genui-lib/Tag/schema.ts","../src/genui-lib/Tag/index.tsx","../src/components/Modal/Modal.tsx","../src/genui-lib/Modal/schema.ts","../src/genui-lib/Modal/index.tsx","../src/genui-lib/openuiLibrary.tsx","../src/genui-lib/openuiChatLibrary.tsx"],"sourcesContent":["import * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport clsx from \"clsx\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport React, { forwardRef } from \"react\";\n\ntype AccordionVariant = \"clear\" | \"card\" | \"sunk\";\n\nexport type AccordionProps = (\n  | AccordionPrimitive.AccordionSingleProps\n  | AccordionPrimitive.AccordionMultipleProps\n) & {\n  variant?: AccordionVariant;\n};\n\nconst variantMap: Record<AccordionVariant, string> = {\n  clear: \"openui-accordion-clear\",\n  card: \"openui-accordion-card\",\n  sunk: \"openui-accordion-sunk\",\n};\n\nexport const Accordion = forwardRef<\n  React.ComponentRef<typeof AccordionPrimitive.Root>,\n  AccordionProps\n>(({ className, style, variant = \"clear\", ...props }, ref) => (\n  <AccordionPrimitive.Root\n    ref={ref}\n    className={clsx(\"openui-accordion\", variantMap[variant], className)}\n    style={style}\n    {...props}\n  />\n));\n\nexport interface AccordionItemProps\n  extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item> {\n  className?: string;\n  style?: React.CSSProperties;\n  value: string;\n}\n\nexport const AccordionItem = forwardRef<\n  React.ComponentRef<typeof AccordionPrimitive.Item>,\n  AccordionItemProps\n>(({ className, style, value, ...props }, ref) => (\n  <AccordionPrimitive.Item\n    ref={ref}\n    className={clsx(\"openui-accordion-item\", className)}\n    style={style}\n    value={value}\n    {...props}\n  />\n));\n\nexport interface AccordionTriggerProps\n  extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> {\n  className?: string;\n  style?: React.CSSProperties;\n  icon?: React.ReactNode;\n  text: React.ReactNode;\n}\nexport const AccordionTrigger = forwardRef<\n  React.ComponentRef<typeof AccordionPrimitive.Trigger>,\n  AccordionTriggerProps\n>(({ className, style, text, icon, ...props }, ref) => (\n  <AccordionPrimitive.Header className={clsx(\"openui-accordion-header\")}>\n    <AccordionPrimitive.Trigger\n      ref={ref}\n      className={clsx(\"openui-accordion-trigger\", className)}\n      style={style}\n      {...props}\n    >\n      <div className=\"openui-accordion-trigger-content\">\n        {icon && <span className=\"openui-accordion-trigger-content-icon\">{icon}</span>}\n        {text}\n      </div>\n      <ChevronDownIcon className=\"openui-accordion-trigger-icon\" />\n    </AccordionPrimitive.Trigger>\n  </AccordionPrimitive.Header>\n));\n\nexport interface AccordionContentProps\n  extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content> {\n  className?: string;\n  style?: React.CSSProperties;\n  children?: React.ReactNode;\n}\nexport const AccordionContent = forwardRef<\n  React.ComponentRef<typeof AccordionPrimitive.Content>,\n  AccordionContentProps\n>(({ className, style, children, ...props }, ref) => (\n  <AccordionPrimitive.Content\n    ref={ref}\n    className={clsx(\"openui-accordion-content\", className)}\n    style={style}\n    {...props}\n  >\n    <div className=\"openui-accordion-content-wrapper\">{children}</div>\n  </AccordionPrimitive.Content>\n));\n","import { Ref, RefObject } from \"react\";\n\n/**\n * Assigns a value to a ref.\n * Handles both callback refs and ref objects safely.\n *\n * @template T - The type of the ref value\n * @param ref - The ref to assign the value to (can be callback, ref object, or null)\n * @param value - The value to assign\n */\nexport const assignRef = <T = unknown>(ref: Ref<T> | null, value: T | null): void => {\n  if (typeof ref === \"function\") {\n    ref(value);\n  } else if (ref) {\n    (ref as RefObject<T | null>).current = value;\n  }\n};\n","import { useCallback } from \"react\";\nimport { assignRef } from \"../internalUtils/ref\";\n\ntype RefType<T> = React.Ref<T> | React.RefObject<T> | React.ForwardedRef<T>;\n\n/**\n * Custom hook to merge multiple refs into a single ref callback.\n *\n * @template T - The type of element the ref will reference\n * @param refs - Any number of refs or ref functions to merge\n * @returns A callback ref that assigns the value to all provided refs\n */\nexport const useMultipleRefs = <T = HTMLElement>(...refs: Array<RefType<T>>) => {\n  return useCallback(\n    (value: T | null) => {\n      refs.forEach((ref) => {\n        assignRef(ref, value);\n      });\n    },\n    [refs],\n  );\n};\n","import { useArtifactPortalTarget } from \"@openuidev/react-headless\";\nimport { forwardRef, useCallback, useRef } from \"react\";\n\n/**\n * Props for {@link ArtifactPortalTarget}.\n */\nexport type ArtifactPortalTargetProps = {\n  /** Additional CSS class name(s) applied to the container element. */\n  className?: string;\n};\n\n/**\n * Registers a DOM node as the render target for {@link ArtifactPanel} portals.\n *\n * Mount exactly one instance in your layout. Renders a `<div>` with\n * `display: contents` so it doesn't affect layout flow.\n *\n * @category Components\n */\nexport const ArtifactPortalTarget = forwardRef<HTMLDivElement, ArtifactPortalTargetProps>(\n  ({ className }, ref) => {\n    const { setNode } = useArtifactPortalTarget();\n    const forwardedRef = useRef(ref);\n    forwardedRef.current = ref;\n\n    const callbackRef = useCallback(\n      (node: HTMLDivElement | null) => {\n        setNode(node);\n        const fRef = forwardedRef.current;\n        if (typeof fRef === \"function\") {\n          fRef(node);\n        } else if (fRef) {\n          fRef.current = node;\n        }\n      },\n      [setNode],\n    );\n\n    return <div ref={callbackRef} className={className} style={{ display: \"contents\" }} />;\n  },\n);\n\nArtifactPortalTarget.displayName = \"ArtifactPortalTarget\";\n","import { useActiveArtifact } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useMultipleRefs } from \"../../../hooks/useMultipleRefs\";\nimport { ArtifactPortalTarget } from \"./ArtifactPortalTarget\";\n\n/**\n * Props for {@link ArtifactOverlay}.\n *\n * @category Components\n */\nexport type ArtifactOverlayProps = {\n  /** Additional CSS class name(s) applied to the overlay container. */\n  className?: string;\n};\n\n/**\n * Shared overlay wrapper for the artifact portal target.\n * Used by CopilotShell, BottomTray, and Shell (mobile) layouts.\n * Renders an absolute-positioned overlay with slide-in/slide-out animations.\n *\n * @category Components\n */\nexport const ArtifactOverlay = forwardRef<HTMLDivElement, ArtifactOverlayProps>(\n  ({ className }, ref) => {\n    const { isArtifactActive } = useActiveArtifact();\n    const [shouldRender, setShouldRender] = useState(isArtifactActive);\n    const [isExiting, setIsExiting] = useState(false);\n    const internalRef = useRef<HTMLDivElement>(null);\n    const mergedRef = useMultipleRefs<HTMLDivElement>(ref, internalRef);\n\n    useEffect(() => {\n      if (isArtifactActive) {\n        // Opening: mount immediately, cancel any in-progress exit\n        setShouldRender(true);\n        setIsExiting(false);\n      } else if (shouldRender) {\n        // Closing: start exit animation, defer unmount\n        setIsExiting(true);\n      }\n    }, [isArtifactActive]); // eslint-disable-line react-hooks/exhaustive-deps\n\n    const handleAnimationEnd = useCallback(\n      (e: React.AnimationEvent<HTMLDivElement>) => {\n        // Only react to our own animation, not children's animations bubbling up\n        if (e.target !== internalRef.current) return;\n        if (isExiting) {\n          setShouldRender(false);\n          setIsExiting(false);\n        }\n      },\n      [isExiting],\n    );\n\n    if (!shouldRender) return null;\n\n    return (\n      <div\n        ref={mergedRef}\n        className={clsx(\n          \"openui-artifact-overlay\",\n          { \"openui-artifact-overlay--exiting\": isExiting },\n          className,\n        )}\n        onAnimationEnd={handleAnimationEnd}\n      >\n        <ArtifactPortalTarget />\n      </div>\n    );\n  },\n);\n\nArtifactOverlay.displayName = \"ArtifactOverlay\";\n","type SwatchScale = {\n  25: string;\n  50: string;\n  100: string;\n  200: string;\n  300: string;\n  400: string;\n  500: string;\n  600: string;\n  700: string;\n  800: string;\n  900: string;\n  925: string;\n  950: string;\n  1000: string;\n};\n\n// Values copied from design-system color-swatches.css.\nconst BASE_SWATCHES = {\n  neutral: {\n    25: \"oklch(0.994 0 89.876 / 1)\",\n    50: \"oklch(0.985 0 89.876 / 1)\",\n    100: \"oklch(0.97 0 89.876 / 1)\",\n    200: \"oklch(0.922 0 89.876 / 1)\",\n    300: \"oklch(0.87 0 89.876 / 1)\",\n    400: \"oklch(0.715 0 89.876 / 1)\",\n    500: \"oklch(0.556 0 89.876 / 1)\",\n    600: \"oklch(0.439 0 89.876 / 1)\",\n    700: \"oklch(0.371 0 89.876 / 1)\",\n    800: \"oklch(0.269 0 89.876 / 1)\",\n    900: \"oklch(0.205 0 0 / 1)\",\n    925: \"oklch(0.173 0 0 / 1)\",\n    950: \"oklch(0.145 0 0 / 1)\",\n    1000: \"oklch(0.097 0 0 / 1)\",\n  },\n  slate: {\n    25: \"oklch(0.994 0.002 247.839 / 1)\",\n    50: \"oklch(0.984 0.003 247.858 / 1)\",\n    100: \"oklch(0.968 0.007 247.896 / 1)\",\n    200: \"oklch(0.929 0.013 255.508 / 1)\",\n    300: \"oklch(0.869 0.02 252.894 / 1)\",\n    400: \"oklch(0.711 0.035 256.788 / 1)\",\n    500: \"oklch(0.554 0.041 257.417 / 1)\",\n    600: \"oklch(0.446 0.037 257.281 / 1)\",\n    700: \"oklch(0.372 0.039 257.287 / 1)\",\n    800: \"oklch(0.279 0.037 260.031 / 1)\",\n    900: \"oklch(0.208 0.04 265.755 / 1)\",\n    925: \"oklch(0.166 0.029 267.188 / 1)\",\n    950: \"oklch(0.129 0.041 264.695 / 1)\",\n    1000: \"oklch(0.091 0.029 268.957 / 1)\",\n  },\n  gray: {\n    25: \"oklch(0.991 0.001 286.376 / 1)\",\n    50: \"oklch(0.985 0.002 247.839 / 1)\",\n    100: \"oklch(0.967 0.003 264.542 / 1)\",\n    200: \"oklch(0.928 0.006 264.531 / 1)\",\n    300: \"oklch(0.872 0.009 258.338 / 1)\",\n    400: \"oklch(0.714 0.019 261.325 / 1)\",\n    500: \"oklch(0.551 0.023 264.364 / 1)\",\n    600: \"oklch(0.446 0.026 256.802 / 1)\",\n    700: \"oklch(0.373 0.031 259.733 / 1)\",\n    800: \"oklch(0.278 0.03 256.848 / 1)\",\n    900: \"oklch(0.21 0.032 264.665 / 1)\",\n    925: \"oklch(0.171 0.028 267.356 / 1)\",\n    950: \"oklch(0.13 0.027 261.692 / 1)\",\n    1000: \"oklch(0.089 0.024 267.878 / 1)\",\n  },\n  zinc: {\n    25: \"oklch(0.994 0 89.876 / 1)\",\n    50: \"oklch(0.985 0 89.876 / 1)\",\n    100: \"oklch(0.967 0.001 286.375 / 1)\",\n    200: \"oklch(0.92 0.004 286.32 / 1)\",\n    300: \"oklch(0.871 0.005 286.286 / 1)\",\n    400: \"oklch(0.712 0.013 286.067 / 1)\",\n    500: \"oklch(0.552 0.014 285.938 / 1)\",\n    600: \"oklch(0.442 0.015 285.786 / 1)\",\n    700: \"oklch(0.37 0.012 285.805 / 1)\",\n    800: \"oklch(0.274 0.005 286.033 / 1)\",\n    900: \"oklch(0.21 0.006 285.885 / 1)\",\n    925: \"oklch(0.179 0.004 285.981 / 1)\",\n    950: \"oklch(0.141 0.004 285.823 / 1)\",\n    1000: \"oklch(0.108 0.004 285.762 / 1)\",\n  },\n  stone: {\n    25: \"oklch(0.994 0.001 106.423 / 1)\",\n    50: \"oklch(0.985 0.001 106.423 / 1)\",\n    100: \"oklch(0.97 0.001 106.424 / 1)\",\n    200: \"oklch(0.923 0.003 48.717 / 1)\",\n    300: \"oklch(0.869 0.004 56.366 / 1)\",\n    400: \"oklch(0.716 0.009 56.259 / 1)\",\n    500: \"oklch(0.553 0.012 58.071 / 1)\",\n    600: \"oklch(0.444 0.01 73.639 / 1)\",\n    700: \"oklch(0.374 0.009 67.558 / 1)\",\n    800: \"oklch(0.268 0.006 34.298 / 1)\",\n    900: \"oklch(0.216 0.006 56.043 / 1)\",\n    925: \"oklch(0.184 0.005 67.497 / 1)\",\n    950: \"oklch(0.147 0.004 49.25 / 1)\",\n    1000: \"oklch(0.108 0.005 71.346 / 1)\",\n  },\n  blue: {\n    25: \"oklch(0.986 0.007 247.894 / 1)\",\n    50: \"oklch(0.97 0.014 254.604 / 1)\",\n    100: \"oklch(0.932 0.032 255.585 / 1)\",\n    200: \"oklch(0.882 0.057 254.128 / 1)\",\n    300: \"oklch(0.809 0.096 251.813 / 1)\",\n    400: \"oklch(0.714 0.143 254.624 / 1)\",\n    500: \"oklch(0.623 0.188 259.815 / 1)\",\n    600: \"oklch(0.546 0.215 262.881 / 1)\",\n    700: \"oklch(0.488 0.217 264.376 / 1)\",\n    800: \"oklch(0.424 0.181 265.638 / 1)\",\n    900: \"oklch(0.379 0.138 265.522 / 1)\",\n    925: \"oklch(0.328 0.111 266.206 / 1)\",\n    950: \"oklch(0.282 0.087 267.935 / 1)\",\n    1000: \"oklch(0.217 0.066 266.921 / 1)\",\n  },\n  sky: {\n    25: \"oklch(0.991 0.006 223.454 / 1)\",\n    50: \"oklch(0.977 0.012 236.62 / 1)\",\n    100: \"oklch(0.951 0.025 236.824 / 1)\",\n    200: \"oklch(0.901 0.055 230.902 / 1)\",\n    300: \"oklch(0.828 0.101 230.318 / 1)\",\n    400: \"oklch(0.754 0.139 232.661 / 1)\",\n    500: \"oklch(0.685 0.148 237.323 / 1)\",\n    600: \"oklch(0.588 0.139 241.966 / 1)\",\n    700: \"oklch(0.5 0.119 242.749 / 1)\",\n    800: \"oklch(0.443 0.1 240.79 / 1)\",\n    900: \"oklch(0.391 0.085 240.876 / 1)\",\n    925: \"oklch(0.339 0.07 239.068 / 1)\",\n    950: \"oklch(0.293 0.063 243.157 / 1)\",\n    1000: \"oklch(0.212 0.042 240.144 / 1)\",\n  },\n  cyan: {\n    25: \"oklch(0.991 0.009 205.897 / 1)\",\n    50: \"oklch(0.984 0.019 200.873 / 1)\",\n    100: \"oklch(0.956 0.044 203.388 / 1)\",\n    200: \"oklch(0.917 0.077 205.041 / 1)\",\n    300: \"oklch(0.865 0.115 207.078 / 1)\",\n    400: \"oklch(0.797 0.134 211.53 / 1)\",\n    500: \"oklch(0.715 0.126 215.221 / 1)\",\n    600: \"oklch(0.609 0.111 221.723 / 1)\",\n    700: \"oklch(0.52 0.094 223.128 / 1)\",\n    800: \"oklch(0.45 0.077 224.283 / 1)\",\n    900: \"oklch(0.398 0.066 227.392 / 1)\",\n    925: \"oklch(0.345 0.057 226.509 / 1)\",\n    950: \"oklch(0.302 0.054 229.695 / 1)\",\n    1000: \"oklch(0.217 0.037 227.615 / 1)\",\n  },\n  teal: {\n    25: \"oklch(0.992 0.007 174.385 / 1)\",\n    50: \"oklch(0.984 0.014 180.72 / 1)\",\n    100: \"oklch(0.953 0.05 180.801 / 1)\",\n    200: \"oklch(0.91 0.093 180.426 / 1)\",\n    300: \"oklch(0.855 0.125 181.071 / 1)\",\n    400: \"oklch(0.785 0.133 181.912 / 1)\",\n    500: \"oklch(0.704 0.123 182.503 / 1)\",\n    600: \"oklch(0.6 0.104 184.704 / 1)\",\n    700: \"oklch(0.511 0.086 186.391 / 1)\",\n    800: \"oklch(0.437 0.071 188.216 / 1)\",\n    900: \"oklch(0.386 0.059 188.416 / 1)\",\n    925: \"oklch(0.335 0.051 189.115 / 1)\",\n    950: \"oklch(0.277 0.045 192.524 / 1)\",\n    1000: \"oklch(0.206 0.033 191.443 / 1)\",\n  },\n  emerald: {\n    25: \"oklch(0.99 0.01 164.879 / 1)\",\n    50: \"oklch(0.979 0.021 166.113 / 1)\",\n    100: \"oklch(0.95 0.051 163.051 / 1)\",\n    200: \"oklch(0.905 0.089 164.15 / 1)\",\n    300: \"oklch(0.845 0.13 164.978 / 1)\",\n    400: \"oklch(0.773 0.153 163.223 / 1)\",\n    500: \"oklch(0.696 0.149 162.48 / 1)\",\n    600: \"oklch(0.596 0.127 163.225 / 1)\",\n    700: \"oklch(0.508 0.105 165.612 / 1)\",\n    800: \"oklch(0.432 0.086 166.913 / 1)\",\n    900: \"oklch(0.378 0.073 168.94 / 1)\",\n    925: \"oklch(0.325 0.062 169.847 / 1)\",\n    950: \"oklch(0.262 0.049 172.552 / 1)\",\n    1000: \"oklch(0.188 0.033 177.113 / 1)\",\n  },\n  lime: {\n    25: \"oklch(0.993 0.018 120.67 / 1)\",\n    50: \"oklch(0.986 0.031 120.757 / 1)\",\n    100: \"oklch(0.967 0.066 122.328 / 1)\",\n    200: \"oklch(0.938 0.122 124.321 / 1)\",\n    300: \"oklch(0.897 0.179 126.665 / 1)\",\n    400: \"oklch(0.849 0.207 128.85 / 1)\",\n    500: \"oklch(0.768 0.204 130.85 / 1)\",\n    600: \"oklch(0.648 0.175 131.684 / 1)\",\n    700: \"oklch(0.532 0.141 131.589 / 1)\",\n    800: \"oklch(0.453 0.113 130.933 / 1)\",\n    900: \"oklch(0.405 0.096 131.063 / 1)\",\n    925: \"oklch(0.341 0.079 131.173 / 1)\",\n    950: \"oklch(0.274 0.069 132.109 / 1)\",\n    1000: \"oklch(0.192 0.046 130.171 / 1)\",\n  },\n  amber: {\n    25: \"oklch(0.993 0.012 96.417 / 1)\",\n    50: \"oklch(0.987 0.021 95.277 / 1)\",\n    100: \"oklch(0.962 0.058 95.617 / 1)\",\n    200: \"oklch(0.924 0.115 95.746 / 1)\",\n    300: \"oklch(0.879 0.153 91.605 / 1)\",\n    400: \"oklch(0.837 0.164 84.429 / 1)\",\n    500: \"oklch(0.769 0.165 70.08 / 1)\",\n    600: \"oklch(0.666 0.157 58.318 / 1)\",\n    700: \"oklch(0.555 0.146 48.998 / 1)\",\n    800: \"oklch(0.473 0.125 46.201 / 1)\",\n    900: \"oklch(0.414 0.105 45.904 / 1)\",\n    925: \"oklch(0.35 0.087 45.765 / 1)\",\n    950: \"oklch(0.279 0.074 45.635 / 1)\",\n    1000: \"oklch(0.206 0.05 48.704 / 1)\",\n  },\n  orange: {\n    25: \"oklch(0.987 0.01 72.664 / 1)\",\n    50: \"oklch(0.98 0.016 73.684 / 1)\",\n    100: \"oklch(0.954 0.037 75.164 / 1)\",\n    200: \"oklch(0.901 0.073 70.697 / 1)\",\n    300: \"oklch(0.837 0.117 66.29 / 1)\",\n    400: \"oklch(0.758 0.159 55.934 / 1)\",\n    500: \"oklch(0.705 0.187 47.604 / 1)\",\n    600: \"oklch(0.646 0.194 41.116 / 1)\",\n    700: \"oklch(0.553 0.174 38.402 / 1)\",\n    800: \"oklch(0.47 0.143 37.304 / 1)\",\n    900: \"oklch(0.408 0.116 38.172 / 1)\",\n    925: \"oklch(0.342 0.096 37.716 / 1)\",\n    950: \"oklch(0.266 0.076 36.259 / 1)\",\n    1000: \"oklch(0.197 0.051 37.083 / 1)\",\n  },\n  green: {\n    25: \"oklch(0.989 0.012 153.679 / 1)\",\n    50: \"oklch(0.982 0.018 155.826 / 1)\",\n    100: \"oklch(0.962 0.043 156.743 / 1)\",\n    200: \"oklch(0.925 0.081 155.995 / 1)\",\n    300: \"oklch(0.871 0.136 154.449 / 1)\",\n    400: \"oklch(0.8 0.182 151.711 / 1)\",\n    500: \"oklch(0.723 0.192 149.579 / 1)\",\n    600: \"oklch(0.627 0.17 149.214 / 1)\",\n    700: \"oklch(0.527 0.137 150.069 / 1)\",\n    800: \"oklch(0.448 0.108 151.328 / 1)\",\n    900: \"oklch(0.393 0.09 152.535 / 1)\",\n    925: \"oklch(0.337 0.076 152.793 / 1)\",\n    950: \"oklch(0.266 0.063 152.934 / 1)\",\n    1000: \"oklch(0.19 0.041 156.904 / 1)\",\n  },\n  yellow: {\n    25: \"oklch(0.995 0.013 102.007 / 1)\",\n    50: \"oklch(0.987 0.026 102.212 / 1)\",\n    100: \"oklch(0.973 0.069 103.193 / 1)\",\n    200: \"oklch(0.945 0.124 101.54 / 1)\",\n    300: \"oklch(0.905 0.166 98.111 / 1)\",\n    400: \"oklch(0.861 0.173 91.936 / 1)\",\n    500: \"oklch(0.795 0.162 86.047 / 1)\",\n    600: \"oklch(0.681 0.142 75.834 / 1)\",\n    700: \"oklch(0.554 0.121 66.442 / 1)\",\n    800: \"oklch(0.476 0.103 61.907 / 1)\",\n    900: \"oklch(0.421 0.09 57.708 / 1)\",\n    925: \"oklch(0.357 0.075 57.491 / 1)\",\n    950: \"oklch(0.286 0.064 53.813 / 1)\",\n    1000: \"oklch(0.209 0.044 56.227 / 1)\",\n  },\n  red: {\n    25: \"oklch(0.982 0.009 17.303 / 1)\",\n    50: \"oklch(0.971 0.013 17.38 / 1)\",\n    100: \"oklch(0.936 0.031 17.717 / 1)\",\n    200: \"oklch(0.885 0.059 18.334 / 1)\",\n    300: \"oklch(0.808 0.103 19.571 / 1)\",\n    400: \"oklch(0.711 0.166 22.216 / 1)\",\n    500: \"oklch(0.637 0.208 25.331 / 1)\",\n    600: \"oklch(0.577 0.215 27.325 / 1)\",\n    700: \"oklch(0.505 0.19 27.518 / 1)\",\n    800: \"oklch(0.444 0.161 26.899 / 1)\",\n    900: \"oklch(0.396 0.133 25.723 / 1)\",\n    925: \"oklch(0.332 0.111 25.625 / 1)\",\n    950: \"oklch(0.258 0.089 26.042 / 1)\",\n    1000: \"oklch(0.184 0.058 25.017 / 1)\",\n  },\n  purple: {\n    25: \"oklch(0.987 0.009 314.783 / 1)\",\n    50: \"oklch(0.977 0.014 308.299 / 1)\",\n    100: \"oklch(0.946 0.033 307.174 / 1)\",\n    200: \"oklch(0.902 0.06 306.703 / 1)\",\n    300: \"oklch(0.827 0.108 306.383 / 1)\",\n    400: \"oklch(0.722 0.177 305.504 / 1)\",\n    500: \"oklch(0.627 0.233 303.9 / 1)\",\n    600: \"oklch(0.558 0.252 302.321 / 1)\",\n    700: \"oklch(0.496 0.237 301.924 / 1)\",\n    800: \"oklch(0.438 0.198 303.724 / 1)\",\n    900: \"oklch(0.381 0.166 304.987 / 1)\",\n    925: \"oklch(0.325 0.142 305.38 / 1)\",\n    950: \"oklch(0.291 0.143 302.717 / 1)\",\n    1000: \"oklch(0.205 0.098 304.68 / 1)\",\n  },\n  violet: {\n    25: \"oklch(0.98 0.011 297.63 / 1)\",\n    50: \"oklch(0.969 0.016 293.756 / 1)\",\n    100: \"oklch(0.943 0.028 294.588 / 1)\",\n    200: \"oklch(0.894 0.055 293.283 / 1)\",\n    300: \"oklch(0.811 0.101 293.571 / 1)\",\n    400: \"oklch(0.709 0.159 293.541 / 1)\",\n    500: \"oklch(0.606 0.219 292.717 / 1)\",\n    600: \"oklch(0.541 0.247 293.009 / 1)\",\n    700: \"oklch(0.491 0.241 292.581 / 1)\",\n    800: \"oklch(0.432 0.211 292.759 / 1)\",\n    900: \"oklch(0.38 0.178 293.745 / 1)\",\n    925: \"oklch(0.324 0.151 293.976 / 1)\",\n    950: \"oklch(0.283 0.135 291.089 / 1)\",\n    1000: \"oklch(0.203 0.088 292.692 / 1)\",\n  },\n  fuchsia: {\n    25: \"oklch(0.984 0.012 329.558 / 1)\",\n    50: \"oklch(0.977 0.017 320.058 / 1)\",\n    100: \"oklch(0.952 0.036 318.852 / 1)\",\n    200: \"oklch(0.903 0.073 319.62 / 1)\",\n    300: \"oklch(0.833 0.132 321.434 / 1)\",\n    400: \"oklch(0.748 0.207 322.16 / 1)\",\n    500: \"oklch(0.667 0.259 322.15 / 1)\",\n    600: \"oklch(0.591 0.257 322.896 / 1)\",\n    700: \"oklch(0.518 0.226 323.949 / 1)\",\n    800: \"oklch(0.452 0.192 324.591 / 1)\",\n    900: \"oklch(0.401 0.16 325.612 / 1)\",\n    925: \"oklch(0.341 0.135 326.232 / 1)\",\n    950: \"oklch(0.293 0.131 325.661 / 1)\",\n    1000: \"oklch(0.208 0.091 326.186 / 1)\",\n  },\n  pink: {\n    25: \"oklch(0.986 0.009 341.798 / 1)\",\n    50: \"oklch(0.971 0.014 343.198 / 1)\",\n    100: \"oklch(0.948 0.028 342.258 / 1)\",\n    200: \"oklch(0.899 0.059 343.231 / 1)\",\n    300: \"oklch(0.823 0.11 346.018 / 1)\",\n    400: \"oklch(0.725 0.175 349.761 / 1)\",\n    500: \"oklch(0.656 0.212 354.308 / 1)\",\n    600: \"oklch(0.592 0.218 0.584 / 1)\",\n    700: \"oklch(0.525 0.199 3.958 / 1)\",\n    800: \"oklch(0.459 0.17 3.815 / 1)\",\n    900: \"oklch(0.408 0.144 2.432 / 1)\",\n    925: \"oklch(0.347 0.124 2.558 / 1)\",\n    950: \"oklch(0.284 0.105 3.907 / 1)\",\n    1000: \"oklch(0.201 0.073 1.239 / 1)\",\n  },\n} as const satisfies Record<string, SwatchScale>;\n\ntype SwatchName = keyof typeof BASE_SWATCHES;\ntype SwatchShade = keyof SwatchScale;\n\n/** Absolute black in oklch format. */\nexport const black = \"oklch(0 0 0 / 1)\";\n/** Absolute white in oklch format. */\nexport const white = \"oklch(1 0 89.876 / 1)\";\n\n/**\n * Return a copy of an oklch color string with its alpha channel replaced.\n *\n * @param color - An oklch color string with `/ 1` alpha (e.g. `\"oklch(0.5 0.1 260 / 1)\"`)\n * @param alpha - New alpha value between 0 and 1\n * @returns The color string with the updated alpha\n *\n * @example\n * ```ts\n * withAlpha(\"oklch(0.5 0.1 260 / 1)\", 0.5)\n * // => \"oklch(0.5 0.1 260 / 0.5)\"\n * ```\n */\nexport const withAlpha = (color: string, alpha: number): string =>\n  color.replace(/\\s\\/\\s(?:1|1\\.0)\\)$/, ` / ${alpha})`);\n\nconst STANDARD_ALPHA_STEPS = [\n  0.02, 0.04, 0.06, 0.08, 0.1, 0.12, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1,\n] as const;\nconst LEGACY_BLACK_WHITE_ALPHA_STEPS = [0, 0.16, 0.24, 0.32, 0.96] as const;\nconst SWATCH_SHADES: SwatchShade[] = [\n  25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 925, 950, 1000,\n];\n\nconst toAlphaSuffix = (alpha: number): string =>\n  `a${Math.round(alpha * 100)\n    .toString()\n    .padStart(2, \"0\")}`;\n\nconst buildAlphaSwatches = (): Record<string, string> => {\n  const map: Record<string, string> = {};\n\n  for (const alpha of STANDARD_ALPHA_STEPS) {\n    map[`black-${toAlphaSuffix(alpha)}`] = withAlpha(black, alpha);\n    map[`white-${toAlphaSuffix(alpha)}`] = withAlpha(white, alpha);\n  }\n  for (const alpha of LEGACY_BLACK_WHITE_ALPHA_STEPS) {\n    map[`black-${toAlphaSuffix(alpha)}`] = withAlpha(black, alpha);\n    map[`white-${toAlphaSuffix(alpha)}`] = withAlpha(white, alpha);\n  }\n\n  for (const family of Object.keys(BASE_SWATCHES) as SwatchName[]) {\n    const baseShade =\n      family === \"neutral\" ||\n      family === \"slate\" ||\n      family === \"gray\" ||\n      family === \"zinc\" ||\n      family === \"stone\"\n        ? 1000\n        : 600;\n    const base = BASE_SWATCHES[family][baseShade];\n    for (const alpha of STANDARD_ALPHA_STEPS) {\n      map[`${family}-${baseShade}-${toAlphaSuffix(alpha)}`] = withAlpha(base, alpha);\n    }\n  }\n\n  return map;\n};\n\nconst buildBaseTokenMap = (): Record<string, string> => {\n  const map: Record<string, string> = {\n    black,\n    white,\n  };\n\n  for (const family of Object.keys(BASE_SWATCHES) as SwatchName[]) {\n    for (const shade of SWATCH_SHADES) {\n      map[`${family}-${shade}`] = BASE_SWATCHES[family][shade];\n    }\n  }\n\n  return map;\n};\n\nconst SWATCH_TOKENS: Record<string, string> = {\n  ...buildBaseTokenMap(),\n  ...buildAlphaSwatches(),\n};\n\n/** Swatch families suitable for neutral/background usage (low chroma). */\nexport type NeutralSwatchName = \"neutral\" | \"slate\" | \"gray\" | \"zinc\" | \"stone\";\n/** Swatch families that can serve as brand/accent color (excludes semantic-only families). */\nexport type BrandSwatchName = Exclude<SwatchName, \"green\" | \"yellow\" | \"red\">;\n\n/**\n * Look up a raw oklch color value by swatch family name and shade.\n *\n * @param name  - One of the 20 swatch families (e.g. `\"blue\"`, `\"neutral\"`)\n * @param shade - Shade step from 25 (lightest) to 1000 (darkest)\n * @returns The oklch color string\n *\n * @example\n * ```ts\n * swatch(\"blue\", 600) // => \"oklch(0.546 0.215 262.881 / 1)\"\n * ```\n */\nexport const swatch = (name: SwatchName, shade: SwatchShade): string => BASE_SWATCHES[name][shade];\n\n/**\n * Resolve a flat token key (e.g. `\"blue-600\"`, `\"black-a50\"`) to its oklch\n * color value. Returns `\"\"` for unknown tokens.\n */\nexport const swatchToken = (token: string): string => SWATCH_TOKENS[token] ?? \"\";\n\n/** The complete flat map of all swatch tokens (base shades + alpha variants). */\nexport const swatchTokens = SWATCH_TOKENS;\n","import { black, BrandSwatchName, NeutralSwatchName, swatch, white, withAlpha } from \"./swatches\";\nimport { ColorTheme, EffectTheme, LayoutTheme, Theme, TypographyTheme } from \"./types\";\n\ntype ThemeMode = \"light\" | \"dark\";\n\ntype ThemeSwatchSelectors = {\n  neutralSwatch: NeutralSwatchName;\n  brandSwatch: BrandSwatchName;\n};\n\nconst LIGHT_SWATCHES: ThemeSwatchSelectors = {\n  neutralSwatch: \"neutral\",\n  brandSwatch: \"neutral\",\n};\n\nconst DARK_SWATCHES: ThemeSwatchSelectors = {\n  neutralSwatch: \"neutral\",\n  brandSwatch: \"neutral\",\n};\n\nconst SEMANTIC_SWATCHES = {\n  info: \"blue\",\n  success: \"green\",\n  alert: \"yellow\",\n  danger: \"red\",\n  purple: \"purple\",\n  pink: \"pink\",\n} as const;\n\nconst getBrandBaseShade = (brandSwatch: BrandSwatchName): 600 | 1000 =>\n  brandSwatch === \"neutral\" ||\n  brandSwatch === \"slate\" ||\n  brandSwatch === \"gray\" ||\n  brandSwatch === \"zinc\" ||\n  brandSwatch === \"stone\"\n    ? 1000\n    : 600;\n\nconst AA_LARGE_CONTRAST_THRESHOLD = 3;\n\nconst clamp01 = (value: number): number => Math.min(1, Math.max(0, value));\n\nconst parseOklch = (value: string): { l: number; c: number; h: number } | null => {\n  const match = value.match(\n    /^oklch\\(\\s*([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)(?:\\s*\\/\\s*[+-]?\\d*\\.?\\d+)?\\s*\\)$/i,\n  );\n  if (!match) {\n    return null;\n  }\n\n  return {\n    l: Number(match[1]),\n    c: Number(match[2]),\n    h: Number(match[3]),\n  };\n};\n\nconst relativeLuminanceFromOklch = (oklchValue: string): number => {\n  const parsed = parseOklch(oklchValue);\n  if (!parsed) {\n    return 0;\n  }\n\n  const hRadians = (parsed.h * Math.PI) / 180;\n  const a = parsed.c * Math.cos(hRadians);\n  const b = parsed.c * Math.sin(hRadians);\n\n  const lPrime = parsed.l + 0.3963377774 * a + 0.2158037573 * b;\n  const mPrime = parsed.l - 0.1055613458 * a - 0.0638541728 * b;\n  const sPrime = parsed.l - 0.0894841775 * a - 1.291485548 * b;\n\n  const l = lPrime ** 3;\n  const m = mPrime ** 3;\n  const s = sPrime ** 3;\n\n  const rLinear = clamp01(4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s);\n  const gLinear = clamp01(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s);\n  const bLinear = clamp01(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s);\n\n  return 0.2126 * rLinear + 0.7152 * gLinear + 0.0722 * bLinear;\n};\n\nconst contrastRatio = (foreground: string, background: string): number => {\n  const luminance1 = relativeLuminanceFromOklch(foreground);\n  const luminance2 = relativeLuminanceFromOklch(background);\n  const lighter = Math.max(luminance1, luminance2);\n  const darker = Math.min(luminance1, luminance2);\n  return (lighter + 0.05) / (darker + 0.05);\n};\n\nconst pickAccentTextFromNeutral = ({\n  neutralSwatch,\n  accentBackground,\n}: {\n  neutralSwatch: NeutralSwatchName;\n  accentBackground: string;\n}): string => {\n  const neutral25 = swatch(neutralSwatch, 25);\n  const neutral1000 = swatch(neutralSwatch, 1000);\n\n  const ratio25 = contrastRatio(neutral25, accentBackground);\n  const ratio1000 = contrastRatio(neutral1000, accentBackground);\n\n  const pass25 = ratio25 >= AA_LARGE_CONTRAST_THRESHOLD;\n  const pass1000 = ratio1000 >= AA_LARGE_CONTRAST_THRESHOLD;\n\n  if (pass25 && pass1000) {\n    return neutral25;\n  }\n  if (pass25) {\n    return neutral25;\n  }\n  if (pass1000) {\n    return neutral1000;\n  }\n  return neutral25;\n};\n\nconst createColorTheme = ({\n  mode,\n  neutralSwatch,\n  brandSwatch,\n}: ThemeSwatchSelectors & { mode: ThemeMode }) => {\n  const isDark = mode === \"dark\";\n  const neutral = neutralSwatch;\n  const brandBase = getBrandBaseShade(brandSwatch);\n  const brandSolid =\n    brandSwatch === \"neutral\"\n      ? isDark\n        ? swatch(neutral, 25)\n        : swatch(neutral, 1000)\n      : swatch(brandSwatch, brandBase);\n\n  const overlayBase = isDark ? swatch(neutral, 25) : swatch(neutral, 1000);\n  const neutralPrimary = isDark ? swatch(neutral, 50) : swatch(neutral, 1000);\n  const neutralSecondary = withAlpha(neutralPrimary, 0.5);\n  const neutralTertiary = withAlpha(neutralPrimary, 0.2);\n\n  const accentText =\n    brandSwatch === \"neutral\"\n      ? isDark\n        ? swatch(neutral, 1000)\n        : swatch(neutral, 25)\n      : pickAccentTextFromNeutral({\n          neutralSwatch: neutral,\n          accentBackground: brandSolid,\n        });\n  const accentTextSecondary = withAlpha(accentText, 0.5);\n  const accentTextTertiary = withAlpha(accentText, 0.2);\n\n  const infoSwatch = SEMANTIC_SWATCHES.info;\n  const successSwatch = SEMANTIC_SWATCHES.success;\n  const alertSwatch = SEMANTIC_SWATCHES.alert;\n  const dangerSwatch = SEMANTIC_SWATCHES.danger;\n  const purpleSwatch = SEMANTIC_SWATCHES.purple;\n  const pinkSwatch = SEMANTIC_SWATCHES.pink;\n\n  const colorTheme: ColorTheme = {\n    // Surface\n    background: isDark ? swatch(neutral, 950) : swatch(neutral, 100),\n    foreground: isDark ? swatch(neutral, 900) : swatch(neutral, 25),\n    popoverBackground: isDark ? swatch(neutral, 900) : swatch(neutral, 25),\n    sunkLight: withAlpha(overlayBase, 0.02),\n    sunk: withAlpha(overlayBase, 0.04),\n    sunkDeep: withAlpha(overlayBase, 0.08),\n    elevatedLight: withAlpha(overlayBase, 0.04),\n    elevated: withAlpha(overlayBase, 0.08),\n    elevatedStrong: withAlpha(overlayBase, 0.16),\n    elevatedIntense: withAlpha(overlayBase, 0.32),\n    overlay: isDark ? withAlpha(black, 0.6) : withAlpha(black, 0.4),\n    highlightSubtle: withAlpha(overlayBase, 0.02),\n    highlight: withAlpha(overlayBase, 0.04),\n    highlightStrong: withAlpha(overlayBase, 0.08),\n    highlightIntense: withAlpha(overlayBase, isDark ? 0.3 : 0.32),\n    invertedBackground: isDark ? swatch(neutral, 25) : swatch(neutral, 1000),\n    infoBackground: withAlpha(swatch(infoSwatch, 500), 0.12),\n    successBackground: withAlpha(swatch(successSwatch, 600), 0.12),\n    alertBackground: withAlpha(swatch(alertSwatch, 500), 0.16),\n    dangerBackground: withAlpha(swatch(dangerSwatch, 600), 0.12),\n    purpleBackground: withAlpha(swatch(purpleSwatch, 500), 0.12),\n    pinkBackground: withAlpha(swatch(pinkSwatch, 600), 0.12),\n\n    // Text / Neutral\n    textNeutralPrimary: neutralPrimary,\n    textNeutralSecondary: neutralSecondary,\n    textNeutralTertiary: neutralTertiary,\n    textNeutralLink: neutralPrimary,\n\n    // Text / Brand\n    textBrand: brandSolid,\n    textWhite: white,\n    textBlack: black,\n\n    // Text / Accent\n    textAccentPrimary: accentText,\n    textAccentSecondary: accentTextSecondary,\n    textAccentTertiary: accentTextTertiary,\n\n    // Text / Success\n    textSuccessPrimary: isDark ? swatch(successSwatch, 300) : swatch(successSwatch, 800),\n    textSuccessInverted: swatch(successSwatch, 100),\n\n    // Text / Alert\n    textAlertPrimary: isDark ? swatch(alertSwatch, 300) : swatch(alertSwatch, 800),\n    textAlertInverted: swatch(alertSwatch, 100),\n\n    // Text / Danger\n    textDangerPrimary: isDark ? swatch(dangerSwatch, 300) : swatch(dangerSwatch, 700),\n    textDangerSecondary: isDark ? swatch(dangerSwatch, 200) : swatch(dangerSwatch, 400),\n    textDangerTertiary: isDark ? swatch(dangerSwatch, 100) : swatch(dangerSwatch, 300),\n\n    // Text / Danger / Inverted\n    textDangerInvertedPrimary: swatch(dangerSwatch, 25),\n    textDangerInvertedSecondary: withAlpha(swatch(dangerSwatch, 25), 0.5),\n    textDangerInvertedTertiary: withAlpha(swatch(dangerSwatch, 25), 0.3),\n\n    // Text / Info\n    textInfoPrimary: isDark ? swatch(infoSwatch, 300) : swatch(infoSwatch, 800),\n    textInfoInverted: swatch(infoSwatch, 100),\n\n    // Text / Pink\n    textPinkPrimary: isDark ? swatch(pinkSwatch, 300) : swatch(pinkSwatch, 800),\n    textPinkInverted: swatch(pinkSwatch, 100),\n\n    // Text / Purple\n    textPurplePrimary: isDark ? swatch(purpleSwatch, 300) : swatch(purpleSwatch, 800),\n    textPurpleInverted: swatch(purpleSwatch, 100),\n\n    // Interactive / Brand\n    interactiveAccentDefault: brandSolid,\n    interactiveAccentHover: withAlpha(brandSolid, 0.8),\n    interactiveAccentDisabled: withAlpha(brandSolid, 0.4),\n    interactiveAccentPressed: brandSolid,\n\n    // Interactive / Destructive\n    interactiveDestructiveDefault: withAlpha(swatch(dangerSwatch, 600), 0.02),\n    interactiveDestructiveHover: withAlpha(swatch(dangerSwatch, 600), 0.08),\n    interactiveDestructiveDisabled: withAlpha(swatch(dangerSwatch, 600), 0.02),\n    interactiveDestructivePressed: withAlpha(swatch(dangerSwatch, 600), 0.1),\n\n    // Interactive / Destructive / Accent\n    interactiveDestructiveAccentDefault: swatch(dangerSwatch, 600),\n    interactiveDestructiveAccentHover: swatch(dangerSwatch, 500),\n    interactiveDestructiveAccentPressed: swatch(dangerSwatch, 700),\n    interactiveDestructiveAccentDisabled: withAlpha(swatch(dangerSwatch, 600), 0.4),\n\n    // Chat\n    chatUserResponseBg: withAlpha(brandSolid, 0.08),\n    chatUserResponseText: neutralPrimary,\n\n    // Border\n    borderDefault: withAlpha(overlayBase, isDark ? 0.06 : 0.06),\n    borderInteractive: withAlpha(overlayBase, isDark ? 0.12 : 0.12),\n    borderInteractiveEmphasis: withAlpha(overlayBase, isDark ? 0.4 : 0.3),\n    borderInteractiveSelected: isDark ? swatch(neutral, 50) : swatch(neutral, 1000),\n    borderAccent: withAlpha(brandSolid, isDark ? 0.2 : 0.08),\n    borderAccentEmphasis: withAlpha(brandSolid, isDark ? 0.4 : 0.3),\n    borderInfo: withAlpha(swatch(infoSwatch, 500), 0.08),\n    borderInfoEmphasis: swatch(infoSwatch, 600),\n    borderAlert: withAlpha(swatch(alertSwatch, 400), 0.08),\n    borderAlertEmphasis: swatch(alertSwatch, 600),\n    borderSuccess: withAlpha(swatch(successSwatch, 600), 0.08),\n    borderSuccessEmphasis: swatch(successSwatch, 600),\n    borderDanger: withAlpha(swatch(dangerSwatch, 600), 0.08),\n    borderDangerEmphasis: swatch(dangerSwatch, 600),\n  };\n\n  return colorTheme;\n};\n\n// ---------------------------------------------------------------------------\n// Light/Dark color theme from selected swatch layers.\n// ---------------------------------------------------------------------------\nconst lightColorTheme = createColorTheme({ mode: \"light\", ...LIGHT_SWATCHES });\nconst darkColorTheme = createColorTheme({ mode: \"dark\", ...DARK_SWATCHES });\n\n// ---------------------------------------------------------------------------\n// Layout – resolved from spacing.css + border-radius.css (same light/dark)\n// ---------------------------------------------------------------------------\nconst SPACE_BASE = 2;\nconst RADIUS_BASE = 2;\n\nconst toPx = (base: number, multiplier: number): string => {\n  const value = base * multiplier;\n  if (value === 0) {\n    return \"0\";\n  }\n  return `${value}px`;\n};\n\nconst layoutTheme: LayoutTheme = {\n  space000: toPx(SPACE_BASE, 0),\n  space3xs: toPx(SPACE_BASE, 1),\n  space2xs: toPx(SPACE_BASE, 2),\n  spaceXs: toPx(SPACE_BASE, 3),\n  spaceS: toPx(SPACE_BASE, 4),\n  spaceSM: toPx(SPACE_BASE, 5),\n  spaceM: toPx(SPACE_BASE, 6),\n  spaceML: toPx(SPACE_BASE, 8),\n  spaceL: toPx(SPACE_BASE, 9),\n  spaceXl: toPx(SPACE_BASE, 12),\n  space2xl: toPx(SPACE_BASE, 18),\n  space3xl: toPx(SPACE_BASE, 24),\n\n  radiusNone: toPx(RADIUS_BASE, 0),\n  radius3xs: toPx(RADIUS_BASE, 0.5),\n  radius2xs: toPx(RADIUS_BASE, 1),\n  radiusXs: toPx(RADIUS_BASE, 2),\n  radiusS: toPx(RADIUS_BASE, 3),\n  radiusM: toPx(RADIUS_BASE, 4),\n  radiusL: toPx(RADIUS_BASE, 5),\n  radiusXl: toPx(RADIUS_BASE, 6),\n  radius2xl: toPx(RADIUS_BASE, 7),\n  radius3xl: toPx(RADIUS_BASE, 8),\n  radius4xl: toPx(RADIUS_BASE, 10),\n  radius5xl: toPx(RADIUS_BASE, 12),\n  radius6xl: toPx(RADIUS_BASE, 14),\n  radius7xl: toPx(RADIUS_BASE, 16),\n  radius8xl: toPx(RADIUS_BASE, 20),\n  radius9xl: toPx(RADIUS_BASE, 24),\n  radiusFull: \"9999px\",\n};\n\n// ---------------------------------------------------------------------------\n// Typography – resolved from typography.css\n// ---------------------------------------------------------------------------\n\nconst FONT_BODY = '\"Inter\", sans-serif';\nconst FONT_CODE = '\"SFMono-Regular\", Menlo, monospace';\nconst FONT_HEADING = '\"Inter\", sans-serif';\nconst FONT_LABEL = '\"Inter\", sans-serif';\nconst FONT_NUMBERS = '\"Inter\", sans-serif';\n\nconst typographyTheme: TypographyTheme = {\n  fontBody: FONT_BODY,\n  fontCode: FONT_CODE,\n  fontHeading: FONT_HEADING,\n  fontLabel: FONT_LABEL,\n  fontNumbers: FONT_NUMBERS,\n\n  fontSize2xs: \"10px\",\n  fontSizeXs: \"12px\",\n  fontSizeSm: \"14px\",\n  fontSizeMd: \"16px\",\n  fontSizeLg: \"18px\",\n  fontSizeXl: \"20px\",\n  fontSize2xl: \"24px\",\n  fontSize3xl: \"28px\",\n  fontSize4xl: \"32px\",\n  fontSize5xl: \"36px\",\n\n  fontWeightRegular: \"400\",\n  fontWeightMedium: \"500\",\n  fontWeightBold: \"600\",\n  fontWeightHeavy: \"700\",\n\n  lineHeightBody: \"1.5\",\n  lineHeightHeading: \"1.25\",\n  lineHeightHeadingLarge: \"1.1\",\n  lineHeightLabel: \"1.25\",\n  lineHeightCode: \"1.5\",\n\n  letterSpacingNormal: \"0\",\n  letterSpacingTight: \"-0.1px\",\n  letterSpacingTighter: \"-0.2px\",\n\n  // Body\n  textBodyXs: `400 12px/1.5 ${FONT_BODY}`,\n  textBodyXsLetterSpacing: \"0\",\n  textBodyXsHeavy: `500 12px/1.5 ${FONT_BODY}`,\n  textBodyXsHeavyLetterSpacing: \"0\",\n  textBodySm: `400 14px/1.5 ${FONT_BODY}`,\n  textBodySmLetterSpacing: \"0\",\n  textBodySmHeavy: `500 14px/1.5 ${FONT_BODY}`,\n  textBodySmHeavyLetterSpacing: \"0\",\n  textBodyDefault: `400 16px/1.5 ${FONT_BODY}`,\n  textBodyDefaultLetterSpacing: \"0\",\n  textBodyDefaultHeavy: `500 16px/1.5 ${FONT_BODY}`,\n  textBodyDefaultHeavyLetterSpacing: \"0\",\n  textBodyLg: `400 18px/1.5 ${FONT_BODY}`,\n  textBodyLgLetterSpacing: \"0\",\n  textBodyLgHeavy: `500 18px/1.5 ${FONT_BODY}`,\n  textBodyLgHeavyLetterSpacing: \"0\",\n\n  // Heading\n  textHeadingXs: `600 16px/1.25 ${FONT_HEADING}`,\n  textHeadingXsLetterSpacing: \"0\",\n  textHeadingSm: `600 18px/1.25 ${FONT_HEADING}`,\n  textHeadingSmLetterSpacing: \"0\",\n  textHeadingMd: `600 24px/1.1 ${FONT_HEADING}`,\n  textHeadingMdLetterSpacing: \"0\",\n  textHeadingLg: `600 28px/1.1 ${FONT_HEADING}`,\n  textHeadingLgLetterSpacing: \"-0.1px\",\n  textHeadingXl: `700 32px/1.1 ${FONT_HEADING}`,\n  textHeadingXlLetterSpacing: \"-0.1px\",\n\n  // Label\n  textLabelXs: `400 12px/1.25 ${FONT_LABEL}`,\n  textLabelXsLetterSpacing: \"0\",\n  textLabelXsHeavy: `500 12px/1.25 ${FONT_LABEL}`,\n  textLabelXsHeavyLetterSpacing: \"0\",\n  textLabelSm: `400 14px/1.25 ${FONT_LABEL}`,\n  textLabelSmLetterSpacing: \"0\",\n  textLabelSmHeavy: `500 14px/1.25 ${FONT_LABEL}`,\n  textLabelSmHeavyLetterSpacing: \"0\",\n  textLabelDefault: `400 16px/1.25 ${FONT_LABEL}`,\n  textLabelDefaultLetterSpacing: \"0\",\n  textLabelDefaultHeavy: `500 16px/1.25 ${FONT_LABEL}`,\n  textLabelDefaultHeavyLetterSpacing: \"0\",\n  textLabelLg: `400 18px/1.25 ${FONT_LABEL}`,\n  textLabelLgLetterSpacing: \"0\",\n  textLabelLgHeavy: `500 18px/1.25 ${FONT_LABEL}`,\n  textLabelLgHeavyLetterSpacing: \"0\",\n\n  // Numbers\n  textNumbersXs: `400 12px/1.5 ${FONT_NUMBERS}`,\n  textNumbersXsLetterSpacing: \"0\",\n  textNumbersXsHeavy: `500 12px/1.5 ${FONT_NUMBERS}`,\n  textNumbersXsHeavyLetterSpacing: \"0\",\n  textNumbersSm: `400 14px/1.5 ${FONT_NUMBERS}`,\n  textNumbersSmLetterSpacing: \"0\",\n  textNumbersSmHeavy: `500 14px/1.5 ${FONT_NUMBERS}`,\n  textNumbersSmHeavyLetterSpacing: \"0\",\n  textNumbersDefault: `400 16px/1.5 ${FONT_NUMBERS}`,\n  textNumbersDefaultLetterSpacing: \"0\",\n  textNumbersDefaultHeavy: `500 16px/1.5 ${FONT_NUMBERS}`,\n  textNumbersDefaultHeavyLetterSpacing: \"0\",\n  textNumbersLg: `400 18px/1.5 ${FONT_NUMBERS}`,\n  textNumbersLgLetterSpacing: \"0\",\n  textNumbersLgHeavy: `500 18px/1.5 ${FONT_NUMBERS}`,\n  textNumbersLgHeavyLetterSpacing: \"0\",\n  textNumbersHeadingSm: `600 18px/1.25 ${FONT_NUMBERS}`,\n  textNumbersHeadingSmLetterSpacing: \"0\",\n  textNumbersHeadingMd: `600 24px/1.1 ${FONT_NUMBERS}`,\n  textNumbersHeadingMdLetterSpacing: \"0\",\n  textNumbersHeadingLg: `600 28px/1.1 ${FONT_NUMBERS}`,\n  textNumbersHeadingLgLetterSpacing: \"0\",\n  textNumbersHeadingXl: `600 32px/1.1 ${FONT_NUMBERS}`,\n  textNumbersHeadingXlLetterSpacing: \"0\",\n\n  // Code\n  textCodeSm: `400 12px/1.5 ${FONT_CODE}`,\n  textCodeSmLetterSpacing: \"0\",\n  textCodeSmHeavy: `700 12px/1.5 ${FONT_CODE}`,\n  textCodeSmHeavyLetterSpacing: \"0\",\n  textCodeDefault: `400 14px/1.5 ${FONT_CODE}`,\n  textCodeDefaultLetterSpacing: \"0\",\n  textCodeDefaultHeavy: `700 14px/1.5 ${FONT_CODE}`,\n  textCodeDefaultHeavyLetterSpacing: \"0\",\n};\n\n// ---------------------------------------------------------------------------\n// Effects – resolved from shadows.css (light values)\n// ---------------------------------------------------------------------------\nconst lightEffectTheme: EffectTheme = {\n  shadow0: \"none\",\n  shadowS: \"0 1px 3px -2px oklch(0 0 0 / 0.02), 0 2px 5px -2px oklch(0 0 0 / 0.04)\",\n  shadowM: \"0 4px 6px -2px oklch(0 0 0 / 0.025), 0 2px 2px -2px oklch(0 0 0 / 0.05)\",\n  shadowL: \"0 4px 4px -2px oklch(0 0 0 / 0.05), 0 4px 8px -2px oklch(0 0 0 / 0.04)\",\n  shadowXl: \"0 8px 16px -4px oklch(0 0 0 / 0.08), 0 16px 32px -6px oklch(0 0 0 / 0.12)\",\n  shadow2xl: \"0 12px 24px -6px oklch(0 0 0 / 0.12), 0 24px 48px -8px oklch(0 0 0 / 0.16)\",\n  shadow3xl: \"0 16px 32px -8px oklch(0 0 0 / 0.16), 0 32px 64px -12px oklch(0 0 0 / 0.22)\",\n};\n\n// ---------------------------------------------------------------------------\n// Effects – resolved from shadows.css (dark values)\n// ---------------------------------------------------------------------------\nconst darkEffectTheme: EffectTheme = {\n  shadow0: \"none\",\n  shadowS: \"0 1px 3px -2px oklch(0 0 0 / 0.06), 0 2px 5px -2px oklch(0 0 0 / 0.10)\",\n  shadowM: \"0 4px 6px -2px oklch(0 0 0 / 0.08), 0 2px 2px -2px oklch(0 0 0 / 0.12)\",\n  shadowL: \"0 4px 4px -2px oklch(0 0 0 / 0.12), 0 4px 8px -2px oklch(0 0 0 / 0.10)\",\n  shadowXl: \"0 8px 16px -4px oklch(0 0 0 / 0.16), 0 16px 32px -6px oklch(0 0 0 / 0.20)\",\n  shadow2xl: \"0 12px 24px -6px oklch(0 0 0 / 0.20), 0 24px 48px -8px oklch(0 0 0 / 0.24)\",\n  shadow3xl: \"0 16px 32px -8px oklch(0 0 0 / 0.24), 0 32px 64px -12px oklch(0 0 0 / 0.28)\",\n};\n\n// ---------------------------------------------------------------------------\n// Exported default themes\n// ---------------------------------------------------------------------------\n/**\n * The built-in light theme. Combines the neutral-swatch light color palette,\n * shared layout and typography tokens, and light-mode shadow values.\n *\n * Used as the base when `ThemeProvider` is rendered with `mode=\"light\"`.\n */\nexport const defaultLightTheme: Theme = Object.freeze({\n  ...lightColorTheme,\n  ...layoutTheme,\n  ...typographyTheme,\n  ...lightEffectTheme,\n});\n\n/**\n * The built-in dark theme. Uses the neutral-swatch dark color palette with\n * inverted surface lightness, higher shadow opacity, and shared layout /\n * typography tokens.\n *\n * Used as the base when `ThemeProvider` is rendered with `mode=\"dark\"`.\n */\nexport const defaultDarkTheme: Theme = Object.freeze({\n  ...darkColorTheme,\n  ...layoutTheme,\n  ...typographyTheme,\n  ...darkEffectTheme,\n});\n","import { defaultLightTheme } from \"./defaultTheme\";\nimport { Theme } from \"./types\";\n\n/**\n * Convert a camel case string to a kebab case string.\n * @param str - The string to convert.\n * @returns A kebab case string.\n */\nexport function camelToKebab(str: string): string {\n  return str\n    .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n    .replace(/([A-Z])([A-Z])/g, \"$1-$2\")\n    .replace(/([a-z])(\\d)/g, \"$1-$2\")\n    .toLowerCase();\n}\n\n/**\n * Convert a theme object to a string of CSS variables.\n * @param theme - The theme object to convert.\n * @param prefix - The prefix to use for the CSS variables.\n * @returns A string of CSS variables.\n */\nexport function themeToCssVars(theme: Record<string, unknown>, prefix = \"openui\"): string {\n  return Object.entries(theme)\n    .filter(([, v]) => typeof v === \"string\")\n    .map(([key, value]) => `--${prefix}-${camelToKebab(key)}: ${value as string};`)\n    .join(\"\\n          \");\n}\n\nfunction levenshteinDistance(a: string, b: string): number {\n  const m = a.length;\n  const n = b.length;\n  const prev: number[] = Array(n + 1).fill(0) as number[];\n  const curr: number[] = Array(n + 1).fill(0) as number[];\n  for (let j = 0; j <= n; j++) prev[j] = j;\n  for (let i = 1; i <= m; i++) {\n    curr[0] = i;\n    for (let j = 1; j <= n; j++) {\n      curr[j] =\n        a[i - 1] === b[j - 1] ? prev[j - 1]! : 1 + Math.min(prev[j]!, curr[j - 1]!, prev[j - 1]!);\n    }\n    for (let j = 0; j <= n; j++) prev[j] = curr[j]!;\n  }\n  return prev[n]!;\n}\n\nconst _warnedKeys = new Set<string>();\n\n/**\n * Validate a partial theme object in development and return it as-is.\n *\n * Works for both light and dark overrides — call it once per theme object:\n *\n * ```tsx\n * <ThemeProvider\n *   lightTheme={createTheme({ interactiveAccentDefault: \"oklch(0.6 0.2 260)\" })}\n *   darkTheme={createTheme({ interactiveAccentDefault: \"oklch(0.4 0.2 260)\" })}\n * />\n * ```\n *\n * In non-production builds this checks every key against the known theme keys\n * and emits a `console.warn` with a \"did you mean …?\" suggestion for typos.\n * In production the validation code is stripped by bundlers.\n *\n * @param theme - A partial {@link Theme} to validate (light or dark overrides).\n * @returns The same `theme` object, unmodified.\n */\nexport function createTheme(theme: Theme): Theme {\n  if (typeof process !== \"undefined\" && process.env?.[\"NODE_ENV\"] !== \"production\") {\n    const knownKeys = Object.keys(defaultLightTheme);\n    for (const key of Object.keys(theme)) {\n      if (knownKeys.includes(key) || _warnedKeys.has(key)) continue;\n      _warnedKeys.add(key);\n\n      let suggestion = \"\";\n      let bestDist = Infinity;\n      for (const known of knownKeys) {\n        const dist = levenshteinDistance(key, known);\n        if (dist < bestDist) {\n          bestDist = dist;\n          suggestion = known;\n        }\n      }\n      const hint = bestDist <= 3 ? ` Did you mean \"${suggestion}\"?` : \"\";\n      console.warn(`[OpenUI] Unknown theme key \"${key}\".${hint}`);\n    }\n  }\n  return theme;\n}\n","import React, { createContext, useContext, useId, useInsertionEffect, useMemo } from \"react\";\nimport { defaultDarkTheme, defaultLightTheme } from \"./defaultTheme\";\nimport { Theme, ThemeMode } from \"./types\";\nimport { themeToCssVars } from \"./utils\";\n\n/**\n * Props for the {@link ThemeProvider} component.\n */\nexport type ThemeProps = {\n  /** Active color scheme. @default \"light\" */\n  mode?: ThemeMode;\n  /** Application content rendered inside the theme context. */\n  children?: React.ReactNode;\n  /**\n   * Partial overrides for **light** mode, merged onto the built-in light\n   * defaults.  Omitted keys fall back to the built-in defaults.\n   * Preferred over the deprecated `theme` prop.\n   */\n  lightTheme?: Theme;\n  /**\n   * Partial overrides for **dark** mode, merged onto the built-in dark\n   * defaults.  When omitted, `lightTheme` overrides are applied to both modes\n   * so a single set of brand customizations \"just works\".\n   */\n  darkTheme?: Theme;\n  /**\n   * @deprecated Use `lightTheme` instead. Kept for backward compatibility;\n   * mapped to `lightTheme` internally. If both `theme` and `lightTheme` are\n   * provided, `lightTheme` wins.\n   */\n  theme?: Theme;\n  /**\n   * CSS selector where `--openui-*` custom properties are injected.\n   * Change this when mounting multiple independent theme scopes.\n   * @default \"body\"\n   */\n  cssSelector?: string;\n};\n\ntype ThemeContextType = {\n  theme: Theme;\n  mode: ThemeMode;\n  portalThemeClassName: string;\n};\n\n/**\n * React context that carries the resolved theme, active mode, and a CSS class\n * name for portals. Consumed via {@link useTheme}.\n */\nexport const ThemeContext = createContext<ThemeContextType>({\n  theme: defaultLightTheme,\n  mode: \"light\",\n  portalThemeClassName: \"\",\n});\n\n/**\n * Access the current theme, mode, and portal class name from the nearest\n * {@link ThemeProvider}.\n *\n * @returns An object with:\n *  - `theme` – the fully resolved {@link Theme} object\n *  - `mode` – `\"light\"` or `\"dark\"`\n *  - `portalThemeClassName` – a unique CSS class name to apply on portal\n *     containers so they inherit the same `--openui-*` custom properties\n *\n * Falls back to the default light theme when no provider is present.\n *\n * @example\n * ```tsx\n * const { theme, mode, portalThemeClassName } = useTheme();\n * ```\n */\nexport const useTheme = () => useContext(ThemeContext);\n\nconst themes = {\n  light: defaultLightTheme,\n  dark: defaultDarkTheme,\n} as const;\n\n// ---------------------------------------------------------------------------\n// Internal context for nesting detection\n// ---------------------------------------------------------------------------\nconst OPENUI_THEME_SENTINEL = Symbol(\"openui-theme-provider\");\n\ntype InternalContextType = {\n  [OPENUI_THEME_SENTINEL]: true;\n  theme: Theme;\n  mode: ThemeMode;\n  portalThemeClassName: string;\n};\n\nconst InternalContext = createContext<InternalContextType | null>(null);\n\n// ---------------------------------------------------------------------------\n// Dev-mode warning deduplication\n// ---------------------------------------------------------------------------\nconst _devWarned = new Set<string>();\n\nfunction warnOnce(key: string, message: string) {\n  if (_devWarned.has(key)) return;\n  _devWarned.add(key);\n  console.warn(message);\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\nfunction cssSafeId(id: string): string {\n  return id.replace(/[^a-zA-Z0-9-_]/g, \"\");\n}\n\nconst _knownThemeKeys = new Set(Object.keys(defaultLightTheme));\n\nfunction validateThemeObject(themeObj: Theme, propName: string) {\n  for (const [key, value] of Object.entries(themeObj)) {\n    if (value !== undefined && typeof value !== \"string\" && !Array.isArray(value)) {\n      warnOnce(\n        `non-string:${propName}:${key}`,\n        `[OpenUI] ${propName} key \"${key}\" has a non-string value (${typeof value}). All theme values should be strings.`,\n      );\n    }\n    if (!_knownThemeKeys.has(key)) {\n      warnOnce(\n        `unknown-key:${propName}:${key}`,\n        `[OpenUI] ${propName} contains unknown key \"${key}\". It will be ignored. Use createTheme() for typo detection with suggestions.`,\n      );\n    }\n  }\n}\n\n/**\n * Injects the OpenUI design-token CSS custom properties (`--openui-*`) into the\n * DOM and provides theme context to all descendant components.\n *\n * Supports automatic scoping when nested inside another ThemeProvider: the inner\n * provider wraps its children in a `<div>` with `display: contents` and injects\n * a scoped style rule instead of targeting `body`.\n *\n * @example\n * ```tsx\n * <ThemeProvider\n *   mode=\"dark\"\n *   lightTheme={createTheme({ interactiveAccentDefault: \"oklch(0.6 0.2 260)\" })}\n * >\n *   <App />\n * </ThemeProvider>\n * ```\n */\n\nexport const ThemeProvider = ({\n  mode = \"light\",\n  children,\n  lightTheme,\n  darkTheme,\n  theme: deprecatedTheme,\n  cssSelector = \"body\",\n}: ThemeProps) => {\n  const id = cssSafeId(useId());\n  const parent = useContext(InternalContext);\n  const isNested = parent != null;\n  const effectiveCssSelector = cssSelector || \"body\";\n  const hasExplicitSelector = effectiveCssSelector !== \"body\";\n\n  // Resolve the deprecated `theme` prop → `lightTheme` takes precedence\n  const userLightTheme = lightTheme ?? deprecatedTheme ?? {};\n  const userDarkTheme = darkTheme;\n\n  // ---------------------------------------------------------------------------\n  // Dev-mode warnings\n  // ---------------------------------------------------------------------------\n  if (typeof process !== \"undefined\" && process.env?.[\"NODE_ENV\"] !== \"production\") {\n    if (deprecatedTheme !== undefined && lightTheme !== undefined) {\n      warnOnce(\n        \"theme+lightTheme\",\n        '[OpenUI] Both \"theme\" and \"lightTheme\" were passed to ThemeProvider. \"lightTheme\" takes precedence. Remove the deprecated \"theme\" prop.',\n      );\n    }\n\n    if (deprecatedTheme !== undefined && lightTheme === undefined) {\n      warnOnce(\n        \"deprecated-theme\",\n        '[OpenUI] The \"theme\" prop on ThemeProvider is deprecated. Use \"lightTheme\" instead.',\n      );\n    }\n\n    validateThemeObject(userLightTheme, \"lightTheme\");\n    if (userDarkTheme) {\n      validateThemeObject(userDarkTheme, \"darkTheme\");\n    }\n\n    // if (isNested && !hasExplicitSelector) {\n    //   warnOnce(\n    //     \"nested-global\",\n    //     '[OpenUI] A nested ThemeProvider is targeting \"body\". The inner provider will auto-scope to avoid overwriting the parent. Pass an explicit cssSelector to opt out.',\n    //   );\n    // }\n  }\n\n  // ---------------------------------------------------------------------------\n  // Theme resolution\n  // ---------------------------------------------------------------------------\n  const resolvedLightTheme = useMemo(\n    () => ({ ...themes.light, ...userLightTheme }),\n    [userLightTheme],\n  );\n\n  const resolvedDarkTheme = useMemo(() => {\n    const overrides = userDarkTheme ?? userLightTheme;\n    return { ...themes.dark, ...overrides };\n  }, [userDarkTheme, userLightTheme]);\n\n  const activeTheme = mode === \"light\" ? resolvedLightTheme : resolvedDarkTheme;\n  const cssVarsString = useMemo(() => themeToCssVars(activeTheme), [activeTheme]);\n\n  const portalClassName = `openui-theme-portal-${id}`;\n  const scopedClassName = `openui-theme-${id}`;\n\n  const contextValue = useMemo<ThemeContextType>(\n    () => ({ theme: activeTheme, mode, portalThemeClassName: portalClassName }),\n    [activeTheme, mode, portalClassName],\n  );\n\n  const internalValue = useMemo<InternalContextType>(\n    () => ({\n      [OPENUI_THEME_SENTINEL]: true as const,\n      theme: activeTheme,\n      mode,\n      portalThemeClassName: portalClassName,\n    }),\n    [activeTheme, mode, portalClassName],\n  );\n\n  // ---------------------------------------------------------------------------\n  // Style injection via useInsertionEffect (Step 4)\n  // ---------------------------------------------------------------------------\n  const useAutoScope = isNested && !hasExplicitSelector;\n  const styleSelector = useAutoScope ? `.${scopedClassName}` : effectiveCssSelector;\n\n  // Intentionally unlayered — must override component styles in both modes,\n  // including when consumers opt into layered-components.css (@layer openui),\n  // so runtime theming always wins. See README \"Styling integration\" before changing.\n  useInsertionEffect(() => {\n    const style = document.createElement(\"style\");\n    style.setAttribute(\"data-openui-theme\", id);\n    style.textContent = `${styleSelector}, .${portalClassName} { ${cssVarsString} }`;\n    document.head.appendChild(style);\n    return () => style.remove();\n  }, [cssVarsString, styleSelector, portalClassName, id]);\n\n  // ---------------------------------------------------------------------------\n  // Render\n  // ---------------------------------------------------------------------------\n  return (\n    <InternalContext.Provider value={internalValue}>\n      <ThemeContext.Provider value={contextValue}>\n        {useAutoScope ? (\n          <div className={scopedClassName} style={{ display: \"contents\" }}>\n            {children}\n          </div>\n        ) : (\n          children\n        )}\n      </ThemeContext.Provider>\n    </InternalContext.Provider>\n  );\n};\n","import { useArtifact, useArtifactPortalTarget } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { X } from \"lucide-react\";\nimport { Component, forwardRef, useEffect, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useTheme } from \"../../ThemeProvider/ThemeProvider\";\n\n/** @internal */\ntype ArtifactErrorBoundaryProps = {\n  children: ReactNode;\n  fallback?: ReactNode;\n};\n\ntype ArtifactErrorBoundaryState = {\n  hasError: boolean;\n};\n\n/** @internal */\nclass ArtifactErrorBoundary extends Component<\n  ArtifactErrorBoundaryProps,\n  ArtifactErrorBoundaryState\n> {\n  constructor(props: ArtifactErrorBoundaryProps) {\n    super(props);\n    this.state = { hasError: false };\n  }\n\n  static getDerivedStateFromError(): ArtifactErrorBoundaryState {\n    return { hasError: true };\n  }\n\n  override render() {\n    if (this.state.hasError) {\n      return this.props.fallback ?? null;\n    }\n    return this.props.children;\n  }\n}\n\n/**\n * Props for {@link ArtifactPanel}.\n *\n * @category Components\n */\nexport type ArtifactPanelProps = {\n  /** Artifact ID this panel renders content for. Must match the ID passed to `useArtifact(id)`. */\n  artifactId: string;\n  /** Content rendered inside the panel when this artifact is active. */\n  children: ReactNode;\n  /** Display title for the panel header and aria-label. Defaults to `\"Artifact\"`. */\n  title?: string;\n  /** Additional CSS class name(s) applied to the panel container. */\n  className?: string;\n  /** Fallback UI rendered if children throw during rendering. Defaults to `null`. */\n  errorFallback?: ReactNode;\n  /**\n   * Controls the panel header.\n   * - `true` (default): built-in header with title + close button\n   * - `false`: no header, raw children only\n   * - `ReactNode`: custom header replacing the built-in one\n   */\n  header?: boolean | ReactNode;\n};\n\n/** @internal */\nconst DefaultHeader = ({ title, onClose }: { title: string; onClose: () => void }) => (\n  <div className=\"openui-artifact-panel__header\">\n    <span className=\"openui-artifact-panel__title\">{title}</span>\n    <button\n      className=\"openui-artifact-panel__close\"\n      onClick={onClose}\n      aria-label=\"Close artifact panel\"\n    >\n      <X size={16} />\n    </button>\n  </div>\n);\n\n/**\n * Portals artifact content into the nearest {@link ArtifactPortalTarget}.\n *\n * Renders nothing when the artifact is inactive or no portal target is mounted.\n * Wraps children in an error boundary and applies theme-scoped class names.\n *\n * Requires `<ArtifactPortalTarget />` to be mounted in the layout.\n *\n * @category Components\n */\nexport const ArtifactPanel = forwardRef<HTMLDivElement, ArtifactPanelProps>(\n  ({ artifactId, children, title, className, errorFallback, header = true }, ref) => {\n    const { isActive, close } = useArtifact(artifactId);\n    const { node: panelNode } = useArtifactPortalTarget();\n    const { portalThemeClassName } = useTheme();\n\n    useEffect(() => {\n      if (!isActive || panelNode) return;\n\n      const timer = setTimeout(() => {\n        console.warn(\n          \"[OpenUI] ArtifactPanel: artifact is active but no render target is mounted. \" +\n            \"Ensure <ArtifactPortalTarget /> is rendered in your layout.\",\n        );\n      }, 100);\n      return () => clearTimeout(timer);\n    }, [isActive, panelNode]);\n\n    if (!isActive || !panelNode) return null;\n\n    const handleClose = () => close();\n\n    let headerContent: ReactNode = null;\n    if (header === true) {\n      headerContent = <DefaultHeader title={title ?? \"Artifact\"} onClose={handleClose} />;\n    } else if (header !== false) {\n      headerContent = header;\n    }\n\n    return createPortal(\n      <div\n        ref={ref}\n        id={`openui-artifact-panel-${artifactId}`}\n        className={clsx(\"openui-artifact-panel\", portalThemeClassName, className)}\n        role=\"region\"\n        aria-label={title ?? \"Artifact panel\"}\n      >\n        {headerContent}\n        <ArtifactErrorBoundary fallback={errorFallback}>{children}</ArtifactErrorBoundary>\n      </div>,\n      panelNode,\n    );\n  },\n);\n\nArtifactPanel.displayName = \"ArtifactPanel\";\n","\"use client\";\n\nimport { useArtifact } from \"@openuidev/react-headless\";\nimport type { ComponentRenderer } from \"@openuidev/react-lang\";\nimport { useId, type ReactNode } from \"react\";\nimport { ArtifactPanel, type ArtifactPanelProps } from \"../components/_shared/artifact\";\n\n/**\n * Controls injected into `preview` and `panel` render functions.\n */\nexport interface ArtifactControls {\n  /** Whether this artifact is the currently active (visible) one. */\n  isActive: boolean;\n  /** Activates this artifact. */\n  open: () => void;\n  /** Deactivates this artifact. */\n  close: () => void;\n  /** Toggles this artifact: opens if closed, closes if open. */\n  toggle: () => void;\n}\n\n/**\n * Configuration for {@link Artifact}.\n */\nexport interface ArtifactConfig<P = Record<string, unknown>> {\n  /** Panel title — static string or derived from props. */\n  title: string | ((props: P) => string);\n  /** Renders the inline preview shown in the chat message. */\n  preview: (props: P, controls: ArtifactControls) => ReactNode;\n  /** Renders the content inside the artifact side panel. */\n  panel: (props: P, controls: ArtifactControls) => ReactNode;\n  /** Optional props forwarded to the underlying `<ArtifactPanel>`. */\n  panelProps?: Pick<ArtifactPanelProps, \"className\" | \"errorFallback\" | \"header\">;\n}\n\n/**\n * Factory that returns a `ComponentRenderer<P>` wiring up `useId`, `useArtifact`,\n * and `<ArtifactPanel>` internally. Pass the result as `defineComponent`'s `component`.\n *\n * @example\n * ```tsx\n * export const ArtifactCodeBlock = defineComponent({\n *   name: \"ArtifactCodeBlock\",\n *   props: ArtifactCodeBlockSchema,\n *   description: \"Code block that opens in the artifact side panel\",\n *   component: Artifact({\n *     title: (props) => props.title,\n *     preview: (props, { open, isActive }) => (\n *       <InlinePreview title={props.title} onOpen={open} isActive={isActive} />\n *     ),\n *     panel: (props) => (\n *       <ArtifactView language={props.language} codeString={props.codeString} />\n *     ),\n *   }),\n * });\n * ```\n */\nexport function Artifact<P = Record<string, unknown>>(\n  config: ArtifactConfig<P>,\n): ComponentRenderer<P> {\n  const { title, preview, panel, panelProps } = config;\n\n  const ArtifactComponent: ComponentRenderer<P> = ({ props }) => {\n    const artifactId = useId();\n    const { isActive, open, close, toggle } = useArtifact(artifactId);\n\n    const controls: ArtifactControls = { isActive, open, close, toggle };\n    const resolvedTitle = typeof title === \"function\" ? title(props) : title;\n\n    return (\n      <>\n        {preview(props, controls)}\n        <ArtifactPanel artifactId={artifactId} title={resolvedTitle} {...panelProps}>\n          {panel(props, controls)}\n        </ArtifactPanel>\n      </>\n    );\n  };\n\n  ArtifactComponent.displayName = `Artifact(${typeof title === \"string\" ? title : \"dynamic\"})`;\n\n  return ArtifactComponent;\n}\n","import clsx from \"clsx\";\nimport { forwardRef, ReactNode } from \"react\";\n\ntype ButtonVariant = \"primary\" | \"secondary\" | \"tertiary\";\ntype ButtonSize = \"extra-small\" | \"small\" | \"medium\" | \"large\";\ntype ButtonType = \"normal\" | \"destructive\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  variant?: ButtonVariant;\n  size?: ButtonSize;\n  iconLeft?: ReactNode;\n  iconRight?: ReactNode;\n  buttonType?: ButtonType;\n}\n\nconst normalVariantMap: Record<ButtonVariant, string> = {\n  primary: \"openui-button-base-primary\",\n  secondary: \"openui-button-base-secondary\",\n  tertiary: \"openui-button-base-tertiary\",\n};\n\nconst destructiveVariantMap: Record<ButtonVariant, string> = {\n  primary: \"openui-button-base-destructive-primary\",\n  secondary: \"openui-button-base-destructive-secondary\",\n  tertiary: \"openui-button-base-destructive-tertiary\",\n};\n\nconst sizeMap: Record<ButtonSize, string> = {\n  \"extra-small\": \"openui-button-base-extra-small\",\n  small: \"openui-button-base-small\",\n  medium: \"openui-button-base-medium\",\n  large: \"openui-button-base-large\",\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n  (\n    {\n      children,\n      variant = \"primary\",\n      size = \"medium\",\n      iconLeft,\n      iconRight,\n      className,\n      buttonType = \"normal\",\n      ...props\n    },\n    ref,\n  ) => {\n    const variantMap = buttonType === \"destructive\" ? destructiveVariantMap : normalVariantMap;\n    return (\n      <button\n        ref={ref}\n        className={clsx(\"openui-button-base\", variantMap[variant], sizeMap[size], className)}\n        {...props}\n      >\n        {iconLeft}\n        {children}\n        {iconRight}\n      </button>\n    );\n  },\n);\n\nButton.displayName = \"Button\";\n","import clsx from \"clsx\";\nimport { CSSProperties, forwardRef, HTMLAttributes, ReactElement } from \"react\";\nimport { ButtonProps } from \"../Button\";\nimport { IconButtonProps } from \"../IconButton\";\n\ntype ButtonsVariant = \"vertical\" | \"horizontal\";\n\nexport interface ButtonsProps extends HTMLAttributes<HTMLDivElement> {\n  variant?: ButtonsVariant;\n  children:\n    | ReactElement<ButtonProps | IconButtonProps>\n    | ReactElement<ButtonProps | IconButtonProps>[];\n  className?: string;\n  style?: CSSProperties;\n}\n\nconst variantMap: Record<ButtonsVariant, string> = {\n  vertical: \"openui-buttons-vertical\",\n  horizontal: \"openui-buttons-horizontal\",\n};\n\nexport const Buttons = forwardRef<HTMLDivElement, ButtonsProps>((props, ref) => {\n  const { className, style, variant = \"horizontal\", children, ...rest } = props;\n  return (\n    <div\n      ref={ref}\n      className={clsx(\"openui-buttons\", variantMap[variant], className)}\n      style={style}\n      {...rest}\n    >\n      {children}\n    </div>\n  );\n});\n\nButtons.displayName = \"Buttons\";\n","import { createContext, useContext, useMemo } from \"react\";\n\nexport const LayoutContext = createContext<{\n  layout: \"mobile\" | \"fullscreen\" | \"tray\" | \"copilot\";\n}>({ layout: \"fullscreen\" });\n\nexport const LayoutContextProvider = ({\n  children,\n  layout,\n}: {\n  children: React.ReactNode;\n  layout: \"mobile\" | \"fullscreen\" | \"tray\" | \"copilot\";\n}) => {\n  const value = useMemo(() => ({ layout }), [layout]);\n  return <LayoutContext.Provider value={value}>{children}</LayoutContext.Provider>;\n};\n\nexport const useLayoutContext = () => {\n  const context = useContext(LayoutContext);\n  return context;\n};\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport clsx from \"clsx\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport React, { createContext, forwardRef, useContext, useEffect, useMemo, useState } from \"react\";\nimport { useTheme } from \"../ThemeProvider\";\n\ntype SelectSize = \"sm\" | \"md\" | \"lg\";\n\ninterface SelectSizeContextType {\n  size: SelectSize;\n  setSize: (size: SelectSize) => void;\n}\n\nconst SelectSizeContext = createContext<SelectSizeContextType | null>(null);\n\nconst useSelectSizeContext = () => useContext(SelectSizeContext);\n\nexport interface SelectProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Root> {\n  size?: SelectSize;\n}\n\nexport const Select = ({ size = \"md\", ...props }: SelectProps) => {\n  const [currentSize, setCurrentSize] = useState<SelectSize>(size);\n\n  useEffect(() => {\n    setCurrentSize(size);\n  }, [size]);\n\n  const contextValue = useMemo(\n    () => ({ size: currentSize, setSize: setCurrentSize }),\n    [currentSize],\n  );\n\n  return (\n    <SelectSizeContext.Provider value={contextValue}>\n      <SelectPrimitive.Root {...props} />\n    </SelectSizeContext.Provider>\n  );\n};\n\nexport interface SelectGroupProps\n  extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Group> {\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport const SelectGroup = forwardRef<\n  React.ComponentRef<typeof SelectPrimitive.Group>,\n  SelectGroupProps\n>(({ className, style, ...props }, ref) => (\n  <SelectPrimitive.Group\n    ref={ref}\n    className={clsx(\"openui-select-group\", className)}\n    style={style}\n    {...props}\n  />\n));\n\nexport const SelectValue = SelectPrimitive.Value;\n\nexport interface SelectTriggerProps\n  extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> {\n  className?: string;\n  style?: React.CSSProperties;\n  children?: React.ReactNode;\n  hideDropdownIcon?: boolean;\n  size?: SelectSize;\n}\n\nconst sizeMap: Record<string, string> = {\n  sm: \"openui-select-trigger-sm\",\n  md: \"openui-select-trigger-md\",\n  lg: \"openui-select-trigger-lg\",\n};\n\nexport const SelectTrigger = forwardRef<\n  React.ComponentRef<typeof SelectPrimitive.Trigger>,\n  SelectTriggerProps\n>(({ className, style, children, hideDropdownIcon, size, ...props }, ref) => {\n  const sizeContext = useSelectSizeContext();\n  const resolvedSize = size ?? sizeContext?.size ?? \"md\";\n\n  useEffect(() => {\n    if (sizeContext && sizeContext.size !== resolvedSize) {\n      sizeContext.setSize(resolvedSize);\n    }\n  }, [resolvedSize, sizeContext]);\n\n  return (\n    <SelectPrimitive.Trigger\n      ref={ref}\n      className={clsx(\"openui-select-trigger\", sizeMap[resolvedSize], className)}\n      style={style}\n      {...props}\n    >\n      {children}\n      <SelectPrimitive.Icon asChild>\n        {!hideDropdownIcon && <ChevronDown className=\"openui-select-trigger-icon\" />}\n      </SelectPrimitive.Icon>\n    </SelectPrimitive.Trigger>\n  );\n});\n\nexport interface SelectContentProps\n  extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> {\n  className?: string;\n  style?: React.CSSProperties;\n  children?: React.ReactNode;\n  position?: \"item-aligned\" | \"popper\";\n}\n\nexport const SelectContent = forwardRef<\n  React.ComponentRef<typeof SelectPrimitive.Content>,\n  SelectContentProps\n>(({ className, children, position = \"popper\", ...props }, ref) => {\n  const { portalThemeClassName } = useTheme();\n  const sizeContext = useSelectSizeContext();\n\n  return (\n    <SelectPrimitive.Portal>\n      <SelectPrimitive.Content\n        ref={ref}\n        className={clsx(\n          \"openui-select-content\",\n          sizeContext && `openui-select-content-${sizeContext.size}`,\n          className,\n          portalThemeClassName,\n        )}\n        position={position}\n        sideOffset={2}\n        {...props}\n      >\n        <SelectPrimitive.Viewport className=\"openui-select-viewport\" data-position={position}>\n          {children}\n        </SelectPrimitive.Viewport>\n      </SelectPrimitive.Content>\n    </SelectPrimitive.Portal>\n  );\n});\n\nexport interface SelectLabelProps\n  extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label> {\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport const SelectLabel = forwardRef<\n  React.ComponentRef<typeof SelectPrimitive.Label>,\n  SelectLabelProps\n>(({ className, style, ...props }, ref) => (\n  <SelectPrimitive.Label\n    ref={ref}\n    className={clsx(\"openui-select-label\", className)}\n    style={style}\n    {...props}\n  />\n));\n\nexport interface SelectItemProps\n  extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item> {\n  className?: string;\n  style?: React.CSSProperties;\n  children?: React.ReactNode;\n  textValue?: string;\n  showTick?: boolean;\n}\n\nexport const SelectItem = forwardRef<\n  React.ComponentRef<typeof SelectPrimitive.Item>,\n  SelectItemProps\n>(({ className, style, children, showTick = true, textValue, ...props }, ref) => (\n  <SelectPrimitive.Item\n    ref={ref}\n    className={clsx(\n      \"openui-select-item\",\n      showTick ? \"openui-select-item--with-tick\" : \"openui-select-item--without-tick\",\n      className,\n    )}\n    style={style}\n    {...props}\n  >\n    {showTick && (\n      <span className=\"openui-select-item-check-wrapper\">\n        <SelectPrimitive.ItemIndicator>\n          <Check className=\"openui-select-item-check-icon\" />\n        </SelectPrimitive.ItemIndicator>\n      </span>\n    )}\n    <SelectPrimitive.ItemText className=\"openui-select-item-text\">\n      {children}\n    </SelectPrimitive.ItemText>\n    {textValue && <span className=\"openui-select-item-text-value\">{textValue}</span>}\n  </SelectPrimitive.Item>\n));\n\nexport interface SelectSeparatorProps\n  extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator> {\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport const SelectSeparator = forwardRef<\n  React.ComponentRef<typeof SelectPrimitive.Separator>,\n  SelectSeparatorProps\n>(({ className, style, ...props }, ref) => (\n  <SelectPrimitive.Separator\n    ref={ref}\n    className={clsx(\"openui-select-separator\", className)}\n    style={style}\n    {...props}\n  />\n));\n","export const getMonthName = (monthNumber: number): string => {\n  switch (monthNumber) {\n    case 0:\n      return \"January\";\n    case 1:\n      return \"February\";\n    case 2:\n      return \"March\";\n    case 3:\n      return \"April\";\n    case 4:\n      return \"May\";\n    case 5:\n      return \"June\";\n    case 6:\n      return \"July\";\n    case 7:\n      return \"August\";\n    case 8:\n      return \"September\";\n    case 9:\n      return \"October\";\n    case 10:\n      return \"November\";\n    case 11:\n      return \"December\";\n    default:\n      return \"Invalid Month\";\n  }\n};\n\nexport const getMonthNumber = (monthName: string): number => {\n  switch (monthName) {\n    case \"January\":\n      return 0;\n    case \"February\":\n      return 1;\n    case \"March\":\n      return 2;\n    case \"April\":\n      return 3;\n    case \"May\":\n      return 4;\n    case \"June\":\n      return 5;\n    case \"July\":\n      return 6;\n    case \"August\":\n      return 7;\n    case \"September\":\n      return 8;\n    case \"October\":\n      return 9;\n    case \"November\":\n      return 10;\n    case \"December\":\n      return 11;\n    default:\n      return -1;\n  }\n};\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport clsx from \"clsx\";\nimport debounce from \"lodash-es/debounce\";\nimport { DetailedHTMLProps, forwardRef, SelectHTMLAttributes, useEffect, useState } from \"react\";\nimport { ClassNames, CustomComponents, DropdownOption } from \"react-day-picker\";\nimport { Select, SelectItem, SelectTrigger, SelectValue } from \"../../Select\";\nimport { getMonthName, getMonthNumber } from \"../utils/helperFn\";\n\n// this component is overriding the default SelectContent component to allow for a container prop we do not wish to give to the user\nconst SelectContent = forwardRef<\n  React.ComponentRef<typeof SelectPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> & {\n    container?: HTMLDivElement | null;\n    viewportClassName?: string;\n  }\n>(({ className, children, position = \"popper\", viewportClassName, container, ...props }, ref) => (\n  <SelectPrimitive.Portal container={container || document.body}>\n    <SelectPrimitive.Content\n      ref={ref}\n      className={clsx(\"openui-select-content\", className)}\n      position={position}\n      {...props}\n    >\n      <SelectPrimitive.Viewport\n        className={clsx(\"openui-select-viewport\", viewportClassName)}\n        data-position={position}\n      >\n        {children}\n      </SelectPrimitive.Viewport>\n    </SelectPrimitive.Content>\n  </SelectPrimitive.Portal>\n));\n\nexport const MonthsDropdown = (\n  props: {\n    classNames: ClassNames;\n    components: CustomComponents;\n    options?: DropdownOption[];\n  } & Omit<\n    DetailedHTMLProps<SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>,\n    \"children\"\n  > & {\n      container?: HTMLDivElement | null;\n    },\n) => {\n  const {\n    className,\n    disabled,\n    onChange,\n    options,\n    value,\n    key,\n    \"aria-label\": ariaLabel,\n    container,\n  } = props;\n\n  const [containerWidth, setContainerWidth] = useState(0);\n  const [containerHeight, setContainerHeight] = useState(0);\n\n  useEffect(() => {\n    if (!container) return;\n\n    const targetElement = container.children[0]?.children[0];\n    if (!targetElement) return;\n\n    const resizeObserver = new ResizeObserver(\n      debounce((entries) => {\n        const { width, height } = entries[0]?.contentRect || {};\n        setContainerWidth(width || 0);\n        setContainerHeight(height || 0);\n      }, 100),\n    );\n\n    resizeObserver.observe(targetElement);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [container]);\n\n  return (\n    <Select\n      onValueChange={(value) =>\n        onChange?.({\n          target: { value: getMonthNumber(value) },\n        } as any)\n      }\n      value={getMonthName(Number(value))}\n      disabled={disabled}\n      key={key}\n      aria-label={ariaLabel}\n    >\n      <SelectTrigger className={clsx(\"openui-calendar-select-trigger\", className)}>\n        <SelectValue placeholder={\"Select a month\"} />\n      </SelectTrigger>\n      <SelectContent\n        container={container}\n        className=\"openui-calendar-select-content-months\"\n        sideOffset={4}\n        alignOffset={0}\n        style={{\n          maxHeight: `${containerHeight - 45}px`,\n          minWidth: `${containerWidth}px`,\n        }}\n      >\n        {options?.map((option) => (\n          <SelectItem\n            key={option.value}\n            value={getMonthName(option.value)}\n            disabled={option.disabled}\n          >\n            {option.label}\n          </SelectItem>\n        ))}\n      </SelectContent>\n    </Select>\n  );\n};\n\nexport const YearsDropdown = (\n  props: {\n    classNames: ClassNames;\n    components: CustomComponents;\n    options?: DropdownOption[];\n  } & Omit<\n    DetailedHTMLProps<SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>,\n    \"children\"\n  > & {\n      container?: HTMLDivElement | null;\n      botType: \"mobile\" | \"fullscreen\" | \"tray\" | \"copilot\";\n    },\n) => {\n  const {\n    className,\n    disabled,\n    onChange,\n    options,\n    value,\n    key,\n    \"aria-label\": ariaLabel,\n    container,\n    botType,\n  } = props;\n\n  const [containerHeight, setContainerHeight] = useState(0);\n\n  useEffect(() => {\n    if (!container) return;\n\n    const targetElement = container.children[0]?.children[0];\n    if (!targetElement) return;\n\n    const resizeObserver = new ResizeObserver(\n      debounce((entries) => {\n        const { height } = entries[0]?.contentRect || {};\n        setContainerHeight(height || 0);\n      }, 100),\n    );\n\n    resizeObserver.observe(targetElement);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [container]);\n\n  return (\n    <Select\n      onValueChange={(value) =>\n        onChange?.({\n          target: { value: Number(value) },\n        } as any)\n      }\n      value={String(value)}\n      disabled={disabled}\n      key={key}\n      aria-label={ariaLabel}\n    >\n      <SelectTrigger className={clsx(\"openui-calendar-select-trigger\", className)}>\n        <SelectValue placeholder={\"Select a month\"} />\n      </SelectTrigger>\n      <SelectContent\n        container={container}\n        className=\"openui-calendar-select-content-years\"\n        viewportClassName={clsx(\n          \"openui-calendar-select-viewport\",\n          botType === \"mobile\" && \"openui-calendar-select-viewport-mobile\",\n        )}\n        sideOffset={4}\n        alignOffset={-75}\n        style={{\n          minHeight: `${containerHeight - 45}px`,\n          maxHeight: `${containerHeight - 45}px`,\n        }}\n      >\n        {options?.map((option) => (\n          <SelectItem\n            key={option.value}\n            value={String(option.value)}\n            disabled={option.disabled}\n            showTick={false}\n            className=\"openui-calendar-select-item\"\n          >\n            {option.label}\n          </SelectItem>\n        ))}\n      </SelectContent>\n    </Select>\n  );\n};\n","import { ClassNames, getDefaultClassNames } from \"react-day-picker\";\n\ntype BotType = \"mobile\" | \"fullscreen\" | \"tray\" | \"copilot\";\nexport const getDayPickerStyles = (botType: BotType) => {\n  const defaultClassNames = getDefaultClassNames();\n\n  const botTypeMapNav: Record<BotType, string> = {\n    mobile: \"openui-calendar-nav-mobile\",\n    fullscreen: \"openui-calendar-nav-fullscreen\",\n    tray: \"openui-calendar-nav-tray\",\n    copilot: \"openui-calendar-nav-copilot\",\n  };\n\n  const botTypeMapDropdowns: Record<BotType, string> = {\n    mobile: \"openui-calendar-dropdowns-mobile\",\n    fullscreen: \"openui-calendar-dropdowns-fullscreen\",\n    tray: \"openui-calendar-dropdowns-tray\",\n    copilot: \"openui-calendar-dropdowns-copilot\",\n  };\n\n  const commonClassNames: Partial<ClassNames> = {\n    root: `${defaultClassNames.root} openui-calendar-root`,\n    nav: `${defaultClassNames.nav} ${botTypeMapNav[botType]}`,\n    dropdowns: `${defaultClassNames.dropdowns} ${botTypeMapDropdowns[botType]}`,\n    month_caption: `openui-calendar-month-caption`,\n    month_grid: `openui-calendar-month-grid`,\n    button_next: `openui-calendar-button-next `,\n    button_previous: `openui-calendar-button-previous `,\n    today: `openui-calendar-today`,\n    disabled: `openui-calendar-disabled`,\n    weekdays: `openui-calendar-weekdays`,\n    weekday: `openui-calendar-weekday`,\n    chevron: `openui-calendar-chevron`,\n    month: `openui-calendar-month`,\n    months_dropdown: `openui-calendar-months-dropdown`,\n    years_dropdown: `openui-calendar-years-dropdown`,\n    footer: `openui-calendar-footer`,\n  };\n\n  const DateSingleClasses: Partial<ClassNames> = {\n    ...commonClassNames,\n    day_button: \"openui-calendar-single-day-button\",\n    day: \"openui-calendar-single-day\",\n    selected: \"openui-calendar-single-day-selected\",\n  };\n\n  const DateRangeClasses: Partial<ClassNames> = {\n    ...commonClassNames,\n    selected: \"\",\n    range_start: \"openui-calendar-range-start\",\n    range_middle: \"openui-calendar-range-middle\",\n    range_end: \"openui-calendar-range-end\",\n    day_button: \"openui-calendar-range-day-button\",\n    day: \"openui-calendar-range-day\",\n  };\n\n  return {\n    DateSingleClasses,\n    DateRangeClasses,\n  };\n};\n","import clsx from \"clsx\";\nimport React, { forwardRef, useRef } from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { useLayoutContext } from \"../../context/LayoutContext\";\nimport { useMultipleRefs } from \"../../hooks/useMultipleRefs\";\nimport { MonthsDropdown, YearsDropdown } from \"./components/helperComponents\";\nimport { getDayPickerStyles } from \"./utils/styles\";\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n  ({ className, classNames, ...props }, ref) => {\n    const { layout } = useLayoutContext();\n    const { DateSingleClasses, DateRangeClasses } = getDayPickerStyles(layout);\n    const containerRef = useRef<HTMLDivElement>(null);\n    const assignRef = useMultipleRefs(ref, containerRef);\n\n    const commonProps = {\n      captionLayout: \"dropdown\" as const,\n      components: {\n        MonthsDropdown: (props: any) => (\n          <MonthsDropdown {...props} container={containerRef.current} />\n        ),\n        YearsDropdown: (props: any) => (\n          <YearsDropdown {...props} container={containerRef.current} />\n        ),\n      },\n    };\n\n    return (\n      <div ref={assignRef} className={clsx(\"openui-calendar-container\", className)}>\n        <DayPicker\n          {...commonProps}\n          {...props}\n          classNames={{\n            ...(props.mode === \"single\" || props.mode === \"multiple\"\n              ? DateSingleClasses\n              : DateRangeClasses),\n            ...classNames,\n          }}\n        />\n      </div>\n    );\n  },\n);\n","import clsx from \"clsx\";\nimport React from \"react\";\n\ntype CalloutVariant = \"info\" | \"danger\" | \"warning\" | \"success\" | \"neutral\";\n\nexport interface CalloutProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n  variant?: CalloutVariant;\n  title?: React.ReactNode;\n  description?: React.ReactNode;\n  /** Auto-dismiss after N milliseconds. CSS-only fade + collapse. */\n  duration?: number;\n}\n\nconst variantMap: Record<CalloutVariant, string> = {\n  info: \"openui-callout-info\",\n  danger: \"openui-callout-danger\",\n  warning: \"openui-callout-warning\",\n  success: \"openui-callout-success\",\n  neutral: \"openui-callout-neutral\",\n};\n\nexport const Callout = React.forwardRef<HTMLDivElement, CalloutProps>((props, ref) => {\n  const { className, variant = \"neutral\", title, description, duration, style, ...rest } = props;\n\n  const dismissStyle = duration\n    ? ({ ...style, \"--callout-duration\": `${duration}ms` } as React.CSSProperties)\n    : style;\n\n  return (\n    <div\n      ref={ref}\n      className={clsx(\n        \"openui-callout\",\n        variantMap[variant],\n        duration && \"openui-callout-autodismiss\",\n        className,\n      )}\n      style={dismissStyle}\n      {...rest}\n    >\n      {title && <span className=\"openui-callout-title\">{title}</span>}\n      {description && <span className=\"openui-callout-description\">{description}</span>}\n    </div>\n  );\n});\n","import clsx from \"clsx\";\nimport React from \"react\";\n\ntype CardVariant = \"clear\" | \"card\" | \"sunk\";\ntype CardWidth = \"standard\" | \"full\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n  variant?: CardVariant;\n  width?: CardWidth;\n}\n\nconst variantMap: Record<CardVariant, string> = {\n  clear: \"openui-card-clear\",\n  card: \"openui-card-card\",\n  sunk: \"openui-card-sunk\",\n};\n\nconst widthMap: Record<CardWidth, string> = {\n  standard: \"openui-card-standard\",\n  full: \"openui-card-full\",\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>((props, ref) => {\n  const { className, children, variant = \"card\", width = \"standard\", ...rest } = props;\n\n  return (\n    <div\n      ref={ref}\n      className={clsx(\"openui-card\", className, variantMap[variant], widthMap[width])}\n      {...rest}\n    >\n      {children}\n    </div>\n  );\n});\n\nCard.displayName = \"Card\";\n","import clsx from \"clsx\";\nimport { cloneElement, CSSProperties, forwardRef, ReactElement, ReactNode } from \"react\";\nimport { ButtonProps } from \"../Button\";\nimport { IconButtonProps } from \"../IconButton\";\n\nexport interface CardHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n  icon?: ReactNode;\n  title?: ReactNode;\n  subtitle?: ReactNode;\n  actions?:\n    | ReactElement<ButtonProps | IconButtonProps>\n    | ReactElement<ButtonProps | IconButtonProps>[];\n  className?: string;\n  styles?: CSSProperties;\n}\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>((props, ref) => {\n  const { icon, title, subtitle, actions, className, styles, ...rest } = props;\n  return (\n    <div ref={ref} className={clsx(\"openui-header\", className)} style={styles} {...rest}>\n      <div className=\"openui-header-top\">\n        <div className=\"openui-header-top-left\">\n          {icon && <span className=\"openui-header-top-left-icon\">{icon}</span>}\n          {title}\n        </div>\n        <div className=\"openui-header-top-right\">\n          {Array.isArray(actions)\n            ? actions.map((action, index) => cloneElement(action, { key: index }))\n            : actions}\n        </div>\n      </div>\n      {subtitle && <div className=\"openui-header-bottom\">{subtitle}</div>}\n    </div>\n  );\n});\n\nCardHeader.displayName = \"CardHeader\";\n","import clsx from \"clsx\";\nimport { ButtonHTMLAttributes, forwardRef, ReactNode } from \"react\";\n\ntype IconButtonVariant = \"primary\" | \"secondary\" | \"tertiary\";\ntype IconButtonSize =\n  | \"3-extra-small\"\n  | \"2-extra-small\"\n  | \"extra-small\"\n  | \"small\"\n  | \"medium\"\n  | \"large\";\ntype IconButtonShape = \"square\" | \"circle\";\ntype IconButtonAppearance = \"normal\" | \"destructive\";\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n  icon: ReactNode;\n  variant?: IconButtonVariant;\n  size?: IconButtonSize;\n  shape?: IconButtonShape;\n  className?: string;\n  appearance?: IconButtonAppearance;\n}\n\nconst normalIconButtonVariants = {\n  primary: \"openui-icon-button-primary\",\n  secondary: \"openui-icon-button-secondary\",\n  tertiary: \"openui-icon-button-tertiary\",\n} as const;\n\nconst destructiveIconButtonVariants = {\n  primary: \"openui-icon-button-destructive-primary\",\n  secondary: \"openui-icon-button-destructive-secondary\",\n  tertiary: \"openui-icon-button-destructive-tertiary\",\n} as const;\n\nconst iconButtonSizes = {\n  \"3-extra-small\": \"openui-icon-button-3-extra-small\",\n  \"2-extra-small\": \"openui-icon-button-2-extra-small\",\n  \"extra-small\": \"openui-icon-button-extra-small\",\n  small: \"openui-icon-button-small\",\n  medium: \"openui-icon-button-medium\",\n  large: \"openui-icon-button-large\",\n} as const;\n\nconst iconButtonShapes = {\n  square: \"openui-icon-button-square\",\n  circle: \"openui-icon-button-circle\",\n} as const;\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>((props, ref) => {\n  const {\n    className,\n    icon,\n    variant = \"primary\",\n    size = \"medium\",\n    shape = \"square\",\n    appearance = \"normal\",\n    ...rest\n  } = props;\n\n  const iconButtonVariants =\n    appearance === \"normal\" ? normalIconButtonVariants : destructiveIconButtonVariants;\n\n  return (\n    <button\n      ref={ref}\n      className={clsx(\n        \"openui-icon-button\",\n        iconButtonVariants[variant],\n        iconButtonSizes[size],\n        iconButtonShapes[shape],\n        className,\n      )}\n      {...rest}\n    >\n      {icon && <span className=\"openui-icon-button-icon\">{icon}</span>}\n    </button>\n  );\n});\n\nIconButton.displayName = \"IconButton\";\n","import clsx from \"clsx\";\nimport {\n  createContext,\n  forwardRef,\n  useCallback,\n  useContext,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { IconButton } from \"../IconButton\";\n\ninterface CarouselContextType {\n  scrollDivRef: React.RefObject<HTMLDivElement | null>;\n  scroll: (direction: \"left\" | \"right\") => void;\n  itemsToScroll: number;\n  noSnap?: boolean;\n  showButtons?: boolean;\n  variant?: \"card\" | \"sunk\";\n  isPrevVisible: boolean;\n  isNextVisible: boolean;\n}\n\nconst CarouselContext = createContext<CarouselContextType | null>(null);\n\nconst useCarousel = () => {\n  const context = useContext(CarouselContext);\n  if (!context) throw new Error(\"useCarousel must be used within a Carousel\");\n  return context;\n};\n\nexport interface CarouselProps extends React.HTMLAttributes<HTMLDivElement> {\n  itemsToScroll?: number;\n  noSnap?: boolean;\n  showButtons?: boolean;\n  variant?: \"card\" | \"sunk\";\n  onScrollLeftEnabled?: (enabled: boolean) => void;\n  onScrollRightEnabled?: (enabled: boolean) => void;\n}\n\nexport interface CarouselRef {\n  scroll: (direction: \"left\" | \"right\") => void;\n  scrollDivRef: React.RefObject<HTMLDivElement | null>;\n}\n\nexport const Carousel = forwardRef<CarouselRef, CarouselProps>(\n  (\n    {\n      itemsToScroll = 1,\n      noSnap,\n      showButtons = true,\n      variant = \"card\",\n      className,\n      children,\n      onScrollLeftEnabled,\n      onScrollRightEnabled,\n      ...props\n    },\n    ref,\n  ) => {\n    const scrollDivRef = useRef<HTMLDivElement>(null);\n    const [isPrevVisible, setIsPrevVisible] = useState(false);\n    const [isNextVisible, setIsNextVisible] = useState(false);\n\n    const scroll = useCallback(\n      (direction: \"left\" | \"right\") => {\n        if (!scrollDivRef.current) {\n          return;\n        }\n\n        const container = scrollDivRef.current;\n        const items = noSnap\n          ? Array.from(container.children[0]?.children ?? [])\n          : Array.from(container.children);\n\n        if (items.length === 0) {\n          return;\n        }\n\n        const containerRect = container.getBoundingClientRect();\n        const visibleIndex = items.findIndex((child) => {\n          const rect = child.getBoundingClientRect();\n          return rect.left >= containerRect.left;\n        });\n\n        let currentIndex = visibleIndex;\n        if (visibleIndex === -1) {\n          // Scrolled to the far right, so the last item is the current one\n          currentIndex = items.length - 1;\n        }\n\n        const targetIndex =\n          direction === \"left\"\n            ? Math.max(0, currentIndex - itemsToScroll)\n            : Math.min(items.length - 1, currentIndex + itemsToScroll);\n\n        const targetElement = items[targetIndex] as HTMLElement;\n\n        if (targetElement) {\n          container.scrollTo({\n            left: targetElement.offsetLeft,\n            behavior: \"smooth\",\n          });\n        }\n      },\n      [noSnap, itemsToScroll],\n    );\n\n    useEffect(() => {\n      if (!scrollDivRef.current) return;\n\n      const container = scrollDivRef.current;\n      const handleScroll = () => {\n        const canScrollLeft = container.scrollLeft > 0;\n        const canScrollRight =\n          Math.ceil(container.scrollLeft) + container.offsetWidth < container.scrollWidth;\n        setIsPrevVisible(canScrollLeft);\n        setIsNextVisible(canScrollRight);\n      };\n\n      handleScroll();\n\n      const resizeObserver = new ResizeObserver(handleScroll);\n      resizeObserver.observe(container);\n      const mutationObserver = new MutationObserver(handleScroll);\n      mutationObserver.observe(container, { childList: true, subtree: true });\n\n      container.addEventListener(\"scroll\", handleScroll);\n\n      return () => {\n        container.removeEventListener(\"scroll\", handleScroll);\n        resizeObserver.disconnect();\n        mutationObserver.disconnect();\n      };\n    }, []);\n\n    useEffect(() => {\n      onScrollLeftEnabled?.(isPrevVisible);\n    }, [isPrevVisible, onScrollLeftEnabled]);\n\n    useEffect(() => {\n      onScrollRightEnabled?.(isNextVisible);\n    }, [isNextVisible, onScrollRightEnabled]);\n\n    useImperativeHandle(ref, () => {\n      return {\n        scroll,\n        scrollDivRef,\n      };\n    }, [scroll]);\n\n    const contextValue = useMemo(\n      () => ({\n        scrollDivRef,\n        scroll,\n        itemsToScroll,\n        noSnap,\n        showButtons,\n        variant,\n        isPrevVisible,\n        isNextVisible,\n      }),\n      [\n        scrollDivRef,\n        scroll,\n        itemsToScroll,\n        noSnap,\n        showButtons,\n        variant,\n        isPrevVisible,\n        isNextVisible,\n      ],\n    );\n\n    return (\n      <CarouselContext.Provider value={contextValue}>\n        <div\n          className={clsx(\"openui-carousel\", `openui-carousel--${variant}`, className)}\n          {...props}\n        >\n          {children}\n        </div>\n      </CarouselContext.Provider>\n    );\n  },\n);\n\nexport const CarouselContent = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n  ({ className, children, ...props }, _ref) => {\n    const { scrollDivRef, noSnap, isPrevVisible, isNextVisible } = useCarousel();\n\n    const content = noSnap ? (\n      <div className=\"openui-carousel-content-wrapper\">{children}</div>\n    ) : (\n      children\n    );\n\n    return (\n      <div\n        ref={scrollDivRef}\n        className={clsx(\n          \"openui-carousel-content\",\n          {\n            \"openui-carousel-content--mask-left\": isPrevVisible,\n            \"openui-carousel-content--mask-right\": isNextVisible,\n          },\n          className,\n        )}\n        {...props}\n      >\n        {content}\n      </div>\n    );\n  },\n);\n\nexport const CarouselItem = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n  ({ className, children, ...props }, ref) => (\n    <div ref={ref} className={clsx(\"openui-carousel-item\", className)} {...props}>\n      {children}\n    </div>\n  ),\n);\n\nexport const CarouselPrevious = forwardRef<\n  HTMLButtonElement,\n  React.ComponentProps<typeof IconButton>\n>(({ className, style, ...props }, ref) => {\n  const { scroll, showButtons, isPrevVisible } = useCarousel();\n\n  if (!isPrevVisible || !showButtons) return null;\n\n  return (\n    <div className={clsx(\"openui-carousel-button openui-carousel-button-left\", className)}>\n      <IconButton\n        ref={ref}\n        shape=\"square\"\n        variant=\"secondary\"\n        size=\"small\"\n        onClick={() => scroll(\"left\")}\n        style={style}\n        {...props}\n      />\n    </div>\n  );\n});\n\nexport const CarouselNext = forwardRef<HTMLButtonElement, React.ComponentProps<typeof IconButton>>(\n  ({ className, style, ...props }, ref) => {\n    const { scroll, showButtons, isNextVisible } = useCarousel();\n\n    if (!isNextVisible || !showButtons) return null;\n\n    return (\n      <div className={clsx(\"openui-carousel-button openui-carousel-button-right\", className)}>\n        <IconButton\n          ref={ref}\n          shape=\"square\"\n          variant=\"secondary\"\n          size=\"small\"\n          onClick={() => scroll(\"right\")}\n          style={style}\n          {...props}\n        />\n      </div>\n    );\n  },\n);\n","import { createContext, useContext, useMemo } from \"react\";\n\ntype PrintContextType = {} | null;\n\nexport const PrintContext = createContext<PrintContextType>(null);\n\nexport const usePrintContext = () => {\n  const context = useContext(PrintContext);\n  return context;\n};\n\nexport const PrintContextProvider = ({ children }: { children: React.ReactNode }) => {\n  const memoizedValue = useMemo(() => ({}), []);\n\n  return <PrintContext.Provider value={memoizedValue}>{children}</PrintContext.Provider>;\n};\n","import clsx from \"clsx\";\nimport { uniqueId } from \"lodash-es\";\nimport { ComponentProps, createContext, forwardRef, useContext, useId, useMemo } from \"react\";\nimport * as RechartsPrimitive from \"recharts\";\nimport { useTheme } from \"../ThemeProvider\";\n\n/**\n * @module Charts\n * A collection of chart components built on top of Recharts with enhanced styling and theming capabilities.\n */\n\n/**\n * Available themes for chart customization\n * @constant\n * @type {Record<'light' | 'dark', string>}\n */\nconst THEMES = { light: \"\", dark: \".dark\" } as const;\n\n/**\n * Configuration type for chart elements\n */\nexport type ChartConfig = {\n  [k in string]: {\n    label?: React.ReactNode;\n    icon?: React.ComponentType;\n    transformed?: string;\n  } & (\n    | { color?: string; secondaryColor?: string; theme?: never }\n    | {\n        color?: never;\n        theme: Record<\n          keyof typeof THEMES,\n          | string\n          | {\n              color: string;\n              secondaryColor?: string;\n            }\n        >;\n      }\n  );\n};\n\n/**\n * Data structure for chart export (e.g., to PPTX)\n */\nexport type ExportChartData = {\n  type: \"line\" | \"bar\" | \"area\" | \"pie\" | \"radar\" | \"scatter\";\n  data: {\n    name: string;\n    labels?: string[];\n    values?: number[];\n    x?: number[];\n    y?: number[];\n  }[];\n  options?: {\n    chartColors?: string[];\n    showLegend?: boolean;\n    legendPos?: \"b\" | \"t\" | \"l\" | \"r\";\n    title?: string;\n    showTitle?: boolean;\n    catAxisTitle?: string;\n    showCatAxisTitle?: boolean;\n    valAxisTitle?: string;\n    showValAxisTitle?: boolean;\n    lineSize?: number;\n    barDir?: \"bar\" | \"col\";\n    barGrouping?: \"stacked\" | \"clustered\" | \"percent\" | \"standard\";\n  };\n};\n\n/**\n * Context props for chart configuration\n */\ntype ChartContextProps = {\n  config: ChartConfig;\n  id: string;\n};\n\nconst ChartContext = createContext<ChartContextProps | null>(null);\n\n/**\n * Hook to access chart context\n * @throws Error if used outside of ChartContainer\n */\nfunction useChart() {\n  const context = useContext(ChartContext);\n\n  if (!context) {\n    throw new Error(\"useChart must be used within a <ChartContainer />\");\n  }\n\n  return context;\n}\n\n/**\n * Component that generates theme-specific styles for chart elements\n */\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n  const colorConfig = Object.entries(config).filter(([_, config]) => config.theme || config.color);\n\n  if (!colorConfig.length) {\n    return null;\n  }\n\n  return (\n    <style\n      dangerouslySetInnerHTML={{\n        __html: Object.entries(THEMES)\n          .map(\n            ([theme, prefix]) => `\n    ${prefix} [data-chart=${id}] {\n    ${colorConfig\n      .map(([_, itemConfig]) => {\n        const transformedKey = itemConfig.transformed;\n        const themeValue = itemConfig.theme?.[theme as keyof typeof itemConfig.theme];\n        const color =\n          typeof themeValue === \"string\" ? themeValue : themeValue?.color || itemConfig.color;\n        const secondaryColor =\n          typeof themeValue === \"object\"\n            ? themeValue?.secondaryColor\n            : \"secondaryColor\" in itemConfig\n              ? itemConfig.secondaryColor\n              : undefined;\n\n        return [\n          color ? `  --color-${transformedKey}: ${color};` : null,\n          secondaryColor ? `  --color-${transformedKey}-secondary: ${secondaryColor};` : null,\n        ]\n          .filter(Boolean)\n          .join(\"\\n\");\n      })\n      .filter(Boolean)\n      .join(\"\\n\")}\n    }\n    `,\n          )\n          .join(\"\\n\"),\n      }}\n    />\n  );\n};\n\n/**\n * Container component for charts that provides configuration context and styling\n */\nconst ChartContainer = forwardRef<\n  HTMLDivElement,\n  ComponentProps<\"div\"> & {\n    config: ChartConfig;\n    children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>[\"children\"];\n    rechartsProps?: Omit<\n      React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>,\n      \"children\"\n    >;\n  }\n>(({ id, className, children, config, rechartsProps, style, ...props }, ref) => {\n  const uniqueId = useId();\n  const chartId = `openui-chart-${id || uniqueId.replace(/:/g, \"\")}`;\n  const { theme } = useTheme();\n\n  return (\n    <ChartContext.Provider value={{ config, id: chartId }}>\n      <div\n        data-chart={chartId}\n        ref={ref}\n        className={clsx(\"openui-chart-container\", className)}\n        style={\n          {\n            //TODO: remove this once we have a proper theme for charts\n            \"--openui-foreground\": theme.foreground,\n            \"--openui-text-neutral-primary\": theme.textNeutralPrimary,\n            width: \"100%\",\n            height: \"100%\",\n            ...style,\n          } as React.CSSProperties\n        }\n        {...props}\n      >\n        <ChartStyle id={chartId} config={config} />\n        <RechartsPrimitive.ResponsiveContainer\n          width={rechartsProps?.width ?? \"100%\"}\n          height={rechartsProps?.height ?? \"100%\"}\n          minWidth={rechartsProps?.minWidth ?? 1}\n          minHeight={rechartsProps?.minHeight ?? 1}\n          initialDimension={rechartsProps?.initialDimension ?? { width: 1, height: 1 }}\n          id={rechartsProps?.id ?? chartId}\n          {...rechartsProps}\n        >\n          {children}\n        </RechartsPrimitive.ResponsiveContainer>\n      </div>\n    </ChartContext.Provider>\n  );\n});\nChartContainer.displayName = \"Chart\";\n\n/**\n * Re-exported Tooltip component from Recharts\n */\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\n/**\n * Custom tooltip content component with enhanced styling and formatting\n */\ntype ChartTooltipContentProps = React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n  React.ComponentProps<\"div\"> & {\n    hideLabel?: boolean;\n    hideIndicator?: boolean;\n    indicator?: \"line\" | \"dot\" | \"dashed\";\n    nameKey?: string;\n    labelKey?: string;\n    showPercentage?: boolean;\n  };\n\nfunction ChartTooltipContentRender(\n  {\n    active,\n    payload,\n    className,\n    indicator = \"dot\",\n    hideLabel = false,\n    hideIndicator = false,\n    label,\n    labelFormatter,\n    labelClassName,\n    formatter,\n    color,\n    nameKey,\n    labelKey,\n    showPercentage = false,\n  }: ChartTooltipContentProps,\n  ref: React.ForwardedRef<HTMLDivElement>,\n) {\n  const { config } = useChart();\n\n  const tooltipLabel = useMemo(() => {\n    if (hideLabel || !payload?.length) {\n      return null;\n    }\n\n    const [item] = payload;\n    const key = `${labelKey ?? item?.dataKey ?? item?.name ?? \"value\"}`;\n    const itemConfig = getPayloadConfigFromPayload(config, item, key);\n    const value =\n      !labelKey && typeof label === \"string\" ? config[label]?.label || label : itemConfig?.label;\n\n    if (labelFormatter) {\n      return (\n        <div className={clsx(\"openui-chart-tooltip-label-heavy\", labelClassName)}>\n          {labelFormatter(value, payload)}\n        </div>\n      );\n    }\n\n    if (!value) {\n      return null;\n    }\n\n    return <div className={clsx(\"openui-chart-tooltip-label\", labelClassName)}>{value}</div>;\n  }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n  if (!active || !payload?.length) {\n    return null;\n  }\n\n  const nestLabel = payload.length === 1 && indicator !== \"dot\";\n\n  return (\n    <div ref={ref} className={clsx(\"openui-chart-tooltip\", className)}>\n      {!nestLabel && tooltipLabel}\n      <div className=\"openui-chart-tooltip-content\">\n        {payload.map((item, index) => {\n          const key = `${nameKey ?? item.name ?? item.dataKey ?? \"value\"}`;\n          const itemConfig = getPayloadConfigFromPayload(config, item, key);\n          const indicatorColor = (color ?? item.payload.fill) || item.color;\n\n          return (\n            <div\n              key={item.dataKey}\n              className={clsx(\n                \"openui-chart-tooltip-content-item\",\n                indicator === \"dot\" && \"openui-chart-tooltip-content-item--dot\",\n              )}\n            >\n              {formatter && item?.value !== undefined && item.name ? (\n                formatter(item.value, item.name, item, index, item.payload)\n              ) : (\n                <>\n                  {itemConfig?.icon ? (\n                    <itemConfig.icon />\n                  ) : (\n                    !hideIndicator && (\n                      <div\n                        className={clsx(\n                          \"openui-chart-tooltip-content-indicator\",\n                          `openui-chart-tooltip-content-indicator--${indicator}`,\n                        )}\n                        style={\n                          {\n                            \"--color-bg\": indicatorColor,\n                            \"--color-border\": indicatorColor,\n                          } as React.CSSProperties\n                        }\n                      />\n                    )\n                  )}\n                  <div\n                    className={clsx(\n                      \"openui-chart-tooltip-content-value-wrapper\",\n                      nestLabel\n                        ? \"openui-chart-tooltip-content-value-wrapper--nested\"\n                        : \"openui-chart-tooltip-content-value-wrapper--standard\",\n                    )}\n                  >\n                    <div className=\"openui-chart-tooltip-content-label\">\n                      {nestLabel && tooltipLabel}\n                      <span>{itemConfig?.label || item.name}</span>\n                    </div>\n                    {item.value !== undefined && (\n                      <span\n                        className={clsx(\n                          \"openui-chart-tooltip-content-value\",\n                          showPercentage && \"percentage\",\n                        )}\n                      >\n                        {item.value.toLocaleString()}\n                        {showPercentage ? \"%\" : \"\"}\n                      </span>\n                    )}\n                  </div>\n                </>\n              )}\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n\nconst ChartTooltipContent = forwardRef(ChartTooltipContentRender);\nChartTooltipContent.displayName = \"ChartTooltip\";\n\n// this is not used any more, in the new chart, we are using the default legend which is rendered outside the charts container,\n// older charts are still using this legend.\n\n/**\n * Re-exported Legend component from Recharts\n */\nconst ChartLegend = RechartsPrimitive.Legend;\n\n/**\n * Custom legend content component with enhanced styling\n */\nconst ChartLegendContent = forwardRef<\n  HTMLDivElement,\n  React.ComponentProps<\"div\"> &\n    Pick<RechartsPrimitive.LegendProps, \"payload\" | \"verticalAlign\"> & {\n      hideIcon?: boolean;\n      nameKey?: string;\n    }\n>(({ className, hideIcon = false, payload, verticalAlign = \"bottom\", nameKey }, ref) => {\n  const { config } = useChart();\n\n  const payloadWithKeys = useMemo(\n    () =>\n      payload?.map((item) => ({\n        ...item,\n        uniqueKey: uniqueId(`chart-legend-${item.dataKey || item.value || \"\"}-`),\n      })),\n    [payload],\n  );\n\n  if (!payload?.length) {\n    return null;\n  }\n\n  return (\n    <div\n      ref={ref}\n      className={clsx(\"openui-chart-legend\", `openui-chart-legend--${verticalAlign}`, className)}\n    >\n      {payloadWithKeys?.map((item) => {\n        const key = `${nameKey || item.dataKey || \"value\"}`;\n        const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n        return (\n          <div key={item.uniqueKey} className=\"openui-chart-legend-item\">\n            {itemConfig?.icon && !hideIcon ? (\n              <itemConfig.icon />\n            ) : (\n              <div\n                className=\"openui-chart-legend-item-indicator\"\n                style={{ backgroundColor: item.color }}\n              />\n            )}\n            <span className=\"openui-chart-legend-item-label\">{itemConfig?.label}</span>\n          </div>\n        );\n      })}\n    </div>\n  );\n});\nChartLegendContent.displayName = \"ChartLegend\";\n\n/**\n * Helper function to extract configuration for a chart element from a payload\n */\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n  if (typeof payload !== \"object\" || payload === null) {\n    return undefined;\n  }\n\n  const payloadPayload =\n    \"payload\" in payload && typeof payload.payload === \"object\" && payload.payload !== null\n      ? payload.payload\n      : undefined;\n\n  let configLabelKey: string = key;\n\n  if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n    configLabelKey = payload[key as keyof typeof payload] as string;\n  } else if (\n    payloadPayload &&\n    key in payloadPayload &&\n    typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n  ) {\n    configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n  }\n\n  return configLabelKey in config ? config[configLabelKey] : config[key];\n}\n\nexport {\n  ChartContainer,\n  ChartLegend,\n  ChartLegendContent,\n  ChartStyle,\n  ChartTooltip,\n  ChartTooltipContent,\n  getPayloadConfigFromPayload,\n  useChart,\n};\n","import React, { createContext, ReactNode, useContext } from \"react\";\n\nexport interface SideBarChartData {\n  title: string;\n  values: {\n    value: number;\n    label: string;\n    color: string;\n  }[];\n}\n\ninterface SideBarTooltipContextType {\n  data: SideBarChartData | undefined;\n  isSideBarTooltipOpen: boolean;\n  setData: (data: SideBarChartData) => void;\n  setIsSideBarTooltipOpen: (isOpen: boolean) => void;\n}\n\nconst SideBarTooltipContext = createContext<SideBarTooltipContextType | undefined>(undefined);\n\ninterface SideBarTooltipProviderProps {\n  children: ReactNode;\n  isSideBarTooltipOpen: boolean;\n  setIsSideBarTooltipOpen: (isOpen: boolean) => void;\n  data: SideBarChartData | undefined;\n  setData: (data: SideBarChartData) => void;\n}\n\nexport const SideBarTooltipProvider: React.FC<SideBarTooltipProviderProps> = ({\n  children,\n  isSideBarTooltipOpen,\n  setIsSideBarTooltipOpen,\n  data,\n  setData,\n}) => {\n  const value: SideBarTooltipContextType = {\n    data,\n    isSideBarTooltipOpen,\n    setData,\n    setIsSideBarTooltipOpen,\n  };\n\n  return <SideBarTooltipContext.Provider value={value}>{children}</SideBarTooltipContext.Provider>;\n};\n\nexport const useSideBarTooltip = (): SideBarTooltipContextType => {\n  const context = useContext(SideBarTooltipContext);\n  if (context === undefined) {\n    throw new Error(\"useSideBarTooltip must be used within a SideBarTooltipProvider\");\n  }\n  return context;\n};\n\nexport default SideBarTooltipContext;\n","import { useMemo } from \"react\";\nimport { DEFAULT_X_AXIS_HEIGHT, MIN_ROTATION_ANGLE, X_AXIS_PADDING } from \"../constants\";\n\ninterface AngleCalculationResult {\n  angle: number;\n  height: number;\n}\n\n/**\n * Calculates the optimal rotation angle and height for X-axis labels using trigonometry.\n *\n * This hook uses the Pythagorean theorem to determine the optimal angle for rotating\n * labels based on the maximum label width and available horizontal space.\n *\n * Mathematical approach:\n * - Hypotenuse = maxLabelWidth (the label length)\n * - Base = X_AXIS_PADDING (available horizontal space from left edge to first label)\n * - Height = sqrt(hypotenuse² - base²)\n * - Angle = atan(height / base) converted to degrees\n *\n * @param maxLabelWidth - The maximum width of all labels in pixels\n * @param enabled - Whether to calculate the angle (typically based on tickVariant)\n * @returns Object containing the calculated angle (in degrees) and required height\n */\nexport const useAutoAngleCalculation = (\n  maxLabelWidth: number,\n  enabled: boolean,\n  widthOfData?: number,\n): AngleCalculationResult => {\n  return useMemo(() => {\n    // If not enabled, return default values for horizontal labels\n    if (!enabled) {\n      return {\n        angle: 0,\n        height: DEFAULT_X_AXIS_HEIGHT,\n      };\n    }\n\n    // Calculate the base (horizontal distance from left edge to first label anchor)\n    // Use widthOfData if provided (space per data point), otherwise fall back to padding\n    const base = widthOfData ?? X_AXIS_PADDING;\n\n    // The hypotenuse is the maximum label width\n    const hypotenuse = maxLabelWidth;\n\n    // Edge case: if base is greater than or equal to hypotenuse,\n    // labels would fit horizontally, but we always apply rotation per requirement\n    if (base >= hypotenuse) {\n      // Apply minimum rotation angle\n      const angleRadians = (MIN_ROTATION_ANGLE * Math.PI) / 180;\n      const height = Math.ceil(hypotenuse * Math.sin(angleRadians));\n\n      return {\n        angle: -MIN_ROTATION_ANGLE, // Negative for counter-clockwise rotation\n        height: Math.max(height, DEFAULT_X_AXIS_HEIGHT), // Ensure minimum height\n      };\n    }\n\n    // Calculate height using Pythagorean theorem: height = sqrt(hypotenuse² - base²)\n    const heightSquared = hypotenuse * hypotenuse - base * base;\n    const height = Math.sqrt(Math.max(0, heightSquared)); // Ensure non-negative\n\n    // Calculate angle using arctangent: angle = atan(height / base)\n    const angleRadians = Math.atan(height / base);\n\n    // Convert radians to degrees\n    const angleDegrees = (angleRadians * 180) / Math.PI;\n\n    // Apply minimum rotation angle if calculated angle is too small\n    const finalAngle = Math.max(angleDegrees, MIN_ROTATION_ANGLE);\n\n    // Recalculate height if we used minimum angle\n    const finalHeight =\n      finalAngle > angleDegrees\n        ? Math.ceil(hypotenuse * Math.sin((finalAngle * Math.PI) / 180))\n        : Math.ceil(height);\n\n    return {\n      angle: -finalAngle, // Negative for counter-clockwise rotation\n      height: Math.max(finalHeight + 16, DEFAULT_X_AXIS_HEIGHT), // Ensure minimum height\n    };\n  }, [maxLabelWidth, enabled, widthOfData]);\n};\n","import { useMemo } from \"react\";\n\nimport { useTheme } from \"../../ThemeProvider\";\n\n/**\n * Creates a canvas 2D rendering context and sets its font style.\n *\n * This hook initializes a canvas element in memory, gets its 2D context,\n * and then applies a font style based on the theme. It includes a fallback\n * to a default font if the theme property is not available.\n *\n * @returns The canvas 2D context with the font style applied, or `null` if the\n *\n */\n\nexport const useCanvasContextForLabelSize = () => {\n  const { theme: userTheme } = useTheme();\n\n  return useMemo(() => {\n    const canvas = document.createElement(\"canvas\");\n    const context = canvas.getContext(\"2d\")!;\n\n    // Should match the chart's actual font for accuracy.\n    const font = userTheme.textLabelXs ?? \"400 10px/12px Inter\";\n    context.font = font;\n    return context;\n  }, [userTheme.textLabelXs]);\n};\n","import { useMemo } from \"react\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { ExportChartData } from \"../Charts\";\n\nexport interface UseExportChartDataProps {\n  type: ExportChartData[\"type\"];\n  data: any[];\n  categoryKey?: string;\n  dataKeys?: string[];\n  colors: string[];\n  legend?: boolean;\n  xAxisLabel?: React.ReactNode;\n  yAxisLabel?: React.ReactNode;\n  extraOptions?: Omit<\n    NonNullable<ExportChartData[\"options\"]>,\n    \"chartColors\" | \"showLegend\" | \"catAxisTitle\" | \"valAxisTitle\"\n  >;\n  // For specialized charts like scatter\n  customDataTransform?: () => ExportChartData[\"data\"];\n}\n\nexport const useExportChartData = ({\n  type,\n  data,\n  categoryKey,\n  dataKeys,\n  colors,\n  legend,\n  xAxisLabel,\n  yAxisLabel,\n  extraOptions,\n  customDataTransform,\n}: UseExportChartDataProps): string | undefined => {\n  const printContext = usePrintContext();\n\n  return useMemo(() => {\n    if (!printContext) {\n      return undefined;\n    }\n\n    const chartData = customDataTransform\n      ? customDataTransform()\n      : (dataKeys || []).map((key) => ({\n          name: key,\n          labels: data.map((item) => (categoryKey ? String(item[categoryKey]) : \"\")),\n          values: data.map((item) => Number(item[key])),\n        }));\n\n    const exportData: ExportChartData = {\n      type,\n      data: chartData,\n      options: {\n        chartColors: colors,\n        showLegend: legend,\n        catAxisTitle: typeof xAxisLabel === \"string\" ? xAxisLabel : undefined,\n        showCatAxisTitle: typeof xAxisLabel === \"string\",\n        valAxisTitle: typeof yAxisLabel === \"string\" ? yAxisLabel : undefined,\n        showValAxisTitle: typeof yAxisLabel === \"string\",\n        ...extraOptions,\n      },\n    };\n\n    return JSON.stringify(exportData);\n  }, [\n    type,\n    data,\n    dataKeys,\n    categoryKey,\n    colors,\n    legend,\n    xAxisLabel,\n    yAxisLabel,\n    extraOptions,\n    customDataTransform,\n    printContext,\n  ]);\n};\n","import { useMemo } from \"react\";\n\nimport { useTheme } from \"../../ThemeProvider\";\nimport { XAxisTickVariant } from \"../types\";\n\nconst DEFAULT_HEIGHT = 30;\n\nexport const useMaxLabelHeight = (\n  data: Record<string, string | number>[],\n  categoryKey: string,\n  tickVariant: XAxisTickVariant,\n  widthOfGroup = 70,\n) => {\n  const { theme: userTheme } = useTheme();\n\n  const maxLabelHeight = useMemo(() => {\n    if (typeof window === \"undefined\" || !data || data.length === 0) {\n      return DEFAULT_HEIGHT;\n    }\n\n    const largestLabel = data.reduce((max, item) => {\n      const label = String(item[categoryKey]);\n      if (max.length < label.length) {\n        return label;\n      }\n      return max;\n    }, \"\");\n\n    const [div1, div2, div3] = [\n      document.createElement(\"div\"),\n      document.createElement(\"div\"),\n      document.createElement(\"div\"),\n    ];\n\n    div1.style.font = userTheme.textLabelXs ?? \"\";\n    div1.style.letterSpacing = userTheme.textLabelXsLetterSpacing ?? \"\";\n    div1.style.opacity = \"0\";\n    div1.style.pointerEvents = \"none\";\n\n    div2.innerText = largestLabel;\n    div3.innerText = \"a\";\n    div1.append(div2, div3);\n\n    div1.style.width = `${widthOfGroup}px`;\n    div1.style.maxWidth = `${widthOfGroup}px`;\n    div1.style.wordBreak = \"break-word\";\n    div1.style.position = \"absolute\";\n    div1.style.visibility = \"hidden\";\n\n    document.body.append(div1);\n\n    const largestLabelHeight = Math.min(\n      div2.getBoundingClientRect().height,\n      div3.getBoundingClientRect().height * 3,\n    );\n    div1.remove();\n\n    return largestLabelHeight;\n  }, [data, categoryKey, tickVariant, widthOfGroup]);\n\n  if (tickVariant === \"multiLine\") {\n    return Math.max(maxLabelHeight + 13, DEFAULT_HEIGHT);\n  } else {\n    return DEFAULT_HEIGHT;\n  }\n};\n\n/**\n * Hook to calculate the maximum label height for horizontal bar charts.\n * This considers the vertical layout and label width constraints specific to horizontal bars.\n * @param data - The chart data\n * @param categoryKey - The category key\n * @param labelWidth - The available width for labels (full chart width for horizontal bars)\n * @returns The calculated label height\n */\nexport const useHorizontalBarLabelHeight = (\n  data: Record<string, string | number>[],\n  categoryKey: string,\n  labelWidth: number,\n) => {\n  const { theme: userTheme } = useTheme();\n\n  const labelHeight = useMemo(() => {\n    if (typeof window === \"undefined\" || !data || data.length === 0) {\n      return 20; // Default height for horizontal bar labels\n    }\n\n    const largestLabel = data.reduce((max, item) => {\n      const label = String(item[categoryKey]);\n      if (max.length < label.length) {\n        return label;\n      }\n      return max;\n    }, \"\");\n\n    const [div1, div2] = [document.createElement(\"div\"), document.createElement(\"div\")];\n\n    // Apply the same typography as the horizontal bar chart labels\n    div1.style.font = userTheme.textLabelXs ?? \"\";\n    div1.style.letterSpacing = userTheme.textLabelXsLetterSpacing ?? \"\";\n    div1.style.opacity = \"0\";\n    div1.style.pointerEvents = \"none\";\n    div1.style.position = \"absolute\";\n    div1.style.visibility = \"hidden\";\n\n    div2.innerText = largestLabel;\n    div1.append(div2);\n\n    // For horizontal bar charts, labels span the full width\n    // Set width constraint for horizontal bar labels\n    div1.style.width = `${labelWidth}px`;\n    div1.style.maxWidth = `${labelWidth}px`;\n    div1.style.overflow = \"hidden\";\n    div1.style.whiteSpace = \"nowrap\";\n    div1.style.textOverflow = \"ellipsis\";\n    div1.style.display = \"flex\";\n    div1.style.alignItems = \"center\";\n\n    document.body.append(div1);\n\n    const calculatedHeight = div2.getBoundingClientRect().height;\n    div1.remove();\n\n    // Add some padding for better visual spacing\n    // For horizontal bars, we need more space since labels are positioned above bars\n    return Math.max(calculatedHeight + 8, 24);\n  }, [data, categoryKey, labelWidth, userTheme.textLabelXs, userTheme.textLabelXsLetterSpacing]);\n\n  return labelHeight;\n};\n","import { useMemo } from \"react\";\n\nimport { useCanvasContextForLabelSize } from \"./useCanvasContextForLabelSize\";\n\n/**\n * Calculates the maximum width of all labels in the chart data.\n *\n * This hook measures the pixel width of each category label and returns\n * the maximum width found. It uses a canvas context to accurately measure\n * text dimensions based on the current theme's font settings.\n *\n * @param data - The chart data array\n * @param categoryKey - The key in the data object that contains the label text\n * @returns The maximum label width in pixels\n */\nexport const useMaxLabelWidth = <T extends Record<string, any>>(\n  data: T[],\n  categoryKey: keyof T,\n): number => {\n  const context = useCanvasContextForLabelSize();\n\n  return useMemo(() => {\n    if (!data || data.length === 0) {\n      return 0;\n    }\n\n    let maxWidth = 0;\n\n    for (const item of data) {\n      const labelValue = String(item[categoryKey] ?? \"\");\n      const metrics = context.measureText(labelValue);\n      const width = metrics.width;\n\n      if (width > maxWidth) {\n        maxWidth = width;\n      }\n    }\n\n    return maxWidth;\n  }, [data, categoryKey, context]);\n};\n","import { useMemo, useRef } from \"react\";\n\nexport const useTransformedKeys = (keys: string[]) => {\n  // Use a ref to maintain a stable cache of key -> UUID mappings\n  const cacheRef = useRef<Record<string, string>>({});\n\n  return useMemo(() => {\n    return keys.reduce(\n      (acc, key) => {\n        // Only generate a new UUID if we don't already have one for this key\n        if (!cacheRef.current[key]) {\n          cacheRef.current[key] = crypto.randomUUID();\n        }\n        acc[key] = cacheRef.current[key];\n        return acc;\n      },\n      {} as Record<string, string>,\n    );\n  }, [keys]);\n};\n","import { ChartConfig } from \"../Charts\";\nimport { PieChartData } from \"../PieChart\";\nimport { RadialChartData } from \"../RadialChart\";\nimport { LegendItem } from \"../types\";\n\n/**\n * This function returns the data keys for the chart, used for the data keys of the chart.\n * @param data - The data to be displayed in the chart.\n * @param categoryKey - The key of the category to be displayed in the chart.\n * @returns The data keys for the chart.\n */\nexport const getDataKeys = (\n  data: Array<Record<string, string | number>>,\n  categoryKey: string,\n): string[] => {\n  return Object.keys(data[0] || {}).filter((key) => key !== categoryKey);\n};\n\n/**\n * This function returns the chart configuration object, used for the chart configuration object of the chart.\n * @param dataKeys - The data keys for the chart.\n * @param colors - The colors for the chart.\n * @param transformedKeys - The transformed keys for the chart.\n * @param secondaryColors - The secondary colors for the chart (optional).\n * @param icons - The icons for the chart (optional).\n * @returns The chart configuration object for the chart.\n */\nexport const get2dChartConfig = (\n  dataKeys: string[],\n  colors: string[],\n  transformedKeys: Record<string, string>,\n  secondaryColors?: string[],\n  icons?: Partial<Record<string, React.ComponentType>>,\n): ChartConfig => {\n  return dataKeys.reduce(\n    (config, key, index) => ({\n      ...config,\n      [key]: {\n        label: key,\n        icon: icons?.[key],\n        color: colors[index],\n        secondaryColor: secondaryColors?.[index] || colors[dataKeys.length - index - 1],\n        transformed: transformedKeys[key],\n      },\n    }),\n    {},\n  );\n};\n\ntype CategoricalChartData = RadialChartData | PieChartData;\n\nexport const getCategoricalChartConfig = <T extends CategoricalChartData>(\n  data: T,\n  categoryKey: keyof T[number],\n  colors: string[], // Change this from 'theme: string' to 'colors: string[]'\n  transformedKeys: Record<string, string>,\n): ChartConfig => {\n  return data.reduce<ChartConfig>((config, item, index) => {\n    const originalKey = String(item[categoryKey]);\n    const transformedKey = `key-${transformedKeys[originalKey] ?? originalKey}`;\n    return {\n      ...config,\n      [transformedKey]: {\n        label: String(item[categoryKey as string]),\n        color: colors[index],\n        secondaryColor: colors[data.length - index - 1], // Add secondary color for gradient effect\n      },\n    };\n  }, {});\n};\n\n/**\n * This function returns the legend items for the chart, used for the legend items of the chart.\n * @param dataKeys - The data keys for the chart.\n * @param colors - The colors for the chart.\n * @param icons - The icons for the chart.\n * @returns The legend items for the chart.\n */\n\nexport const getLegendItems = (\n  dataKeys: string[],\n  colors: string[],\n  icons?: Partial<Record<string, React.ComponentType>>,\n): LegendItem[] => {\n  return dataKeys.map((key, index) => ({\n    key,\n    label: key,\n    color: colors[index] ?? \"#000000\", // Fallback color if undefined\n    icon: icons?.[key] as React.ComponentType | undefined,\n  }));\n};\n\n/**\n * This function returns the color value for a specific data key based on its position in the dataKeys array.\n * Use this instead of payload.fill to ensure consistent color mapping.\n * @param dataKey - The data key to get the color for.\n * @param dataKeys - The array of all data keys in the chart.\n * @param colors - The array of colors corresponding to the data keys.\n * @returns The color value for the specified data key.\n */\nexport const getColorForDataKey = (\n  dataKey: string,\n  dataKeys: string[],\n  colors: string[],\n): string => {\n  const index = dataKeys.indexOf(dataKey);\n  return colors[index] ?? \"#000000\"; // Fallback color if dataKey not found or color undefined\n};\n","import { useMemo } from \"react\";\nimport invariant from \"tiny-invariant\";\nimport { ChartColorPalette, useTheme } from \"../../ThemeProvider\";\n\nexport type ColorPalette = {\n  name: string;\n  // colors are used to display the palette\n  colors: string[];\n};\n\nexport type PaletteName = \"ocean\" | \"orchid\" | \"emerald\" | \"spectrum\" | \"sunset\" | \"vivid\";\n\ntype PaletteMap = Record<string, ColorPalette>;\n\nconst colorPalettes: PaletteMap = {\n  ocean: {\n    name: \"Ocean\",\n    colors: [\n      \"#0D47A1\",\n      \"#1565C0\",\n      \"#1976D2\",\n      \"#1E88E5\",\n      \"#2196F3\",\n      \"#42A5F5\",\n      \"#64B5F6\",\n      \"#90CAF9\",\n      \"#BBDEFB\",\n      \"#E3F2FD\",\n      \"#EFF8FF\",\n    ],\n  },\n  orchid: {\n    name: \"Orchid\",\n    colors: [\n      \"#3A365B\",\n      \"#482E77\",\n      \"#552594\",\n      \"#631DB0\",\n      \"#7014CC\",\n      \"#883BD5\",\n      \"#A062DD\",\n      \"#B88AE6\",\n      \"#CFB1EE\",\n      \"#E7D8F7\",\n      \"#F7EFFF\",\n    ],\n  },\n  emerald: {\n    name: \"Emerald\",\n    colors: [\n      \"#10451D\",\n      \"#155D27\",\n      \"#1A7431\",\n      \"#208B3A\",\n      \"#25A244\",\n      \"#2DC653\",\n      \"#4AD66D\",\n      \"#6EDE8A\",\n      \"#92E6A7\",\n      \"#B7EFC5\",\n      \"#DCFFE5\",\n    ],\n  },\n  spectrum: {\n    name: \"Spectrum\",\n    colors: [\n      \"#2171BC\",\n      \"#2681D7\",\n      \"#72A4EB\",\n      \"#A0C0F7\",\n      \"#C2D4F7\",\n      \"#EADDE8\",\n      \"#EEB3B1\",\n      \"#E99492\",\n      \"#E17475\",\n      \"#D75259\",\n      \"#CB253E\",\n    ],\n  },\n  sunset: {\n    name: \"Sunset\",\n    colors: [\n      \"#0D0887\",\n      \"#42049E\",\n      \"#6A00A8\",\n      \"#900DA4\",\n      \"#B12A90\",\n      \"#CC4678\",\n      \"#E16462\",\n      \"#F1844B\",\n      \"#FCA636\",\n      \"#FCCE25\",\n      \"#FFE06E\",\n    ],\n  },\n  vivid: {\n    name: \"Vivid\",\n    colors: [\n      \"#FF595E\",\n      \"#FF924C\",\n      \"#FFCA3A\",\n      \"#C5CA30\",\n      \"#8AC926\",\n      \"#36949D\",\n      \"#1982C4\",\n      \"#4267AC\",\n      \"#565AA0\",\n      \"#6A4C93\",\n      \"#63438F\",\n    ],\n  },\n};\n\nexport type PaletteKey = keyof typeof colorPalettes;\n\nexport const getPalette = (key: PaletteKey): ColorPalette => {\n  const palette = colorPalettes[key];\n  invariant(palette, `Palette ${key} not found`);\n  return palette;\n};\n\nexport const getAllPalettes = (): ColorPalette[] => {\n  return Object.values(colorPalettes);\n};\n\nexport const getPaletteKeys = (): PaletteKey[] => {\n  return Object.keys(colorPalettes) as PaletteKey[];\n};\n\nexport const getPaletteKey = (palette: ColorPalette): PaletteKey => {\n  return Object.keys(colorPalettes).find((key) => colorPalettes[key] === palette) as PaletteKey;\n};\n\nexport const getPaletteMap = (): PaletteMap => {\n  return colorPalettes;\n};\n\nexport const getDistributedColors = (colors: string[], dataLength: number): string[] => {\n  const midIndex = Math.floor(colors.length / 2);\n\n  if (dataLength === 1) {\n    return [colors[midIndex]!];\n  }\n\n  if (dataLength === 2) {\n    return [colors[midIndex - 1]!, colors[midIndex + 1]!];\n  }\n\n  const result: string[] = [];\n  const offset = Math.floor((dataLength - 1) / 2);\n\n  for (let i = 0; i < dataLength; i++) {\n    const index = midIndex + (i - offset);\n\n    // Handle out of bounds by cycling through colors\n    let actualIndex: number;\n    if (index < 0) {\n      // Wrap around from the end\n      actualIndex = colors.length + (index % colors.length);\n    } else if (index >= colors.length) {\n      // Wrap around from the beginning\n      actualIndex = index % colors.length;\n    } else {\n      actualIndex = index;\n    }\n\n    result.push(colors[actualIndex]!);\n  }\n\n  return result;\n};\n\nexport const useChartPalette = ({\n  chartThemeName,\n  customPalette,\n  themePaletteName,\n  dataLength,\n}: {\n  chartThemeName: PaletteName;\n  customPalette?: string[];\n  themePaletteName: keyof ChartColorPalette;\n  dataLength: number;\n}) => {\n  const { theme } = useTheme();\n  const paletteFromTheme = theme[themePaletteName] || theme.defaultChartPalette;\n  const paletteFromChartTheme = getPalette(chartThemeName);\n\n  const palette = customPalette || paletteFromTheme || paletteFromChartTheme.colors;\n\n  return useMemo(() => {\n    return getDistributedColors(palette, dataLength);\n  }, [palette, dataLength]);\n};\n","/**\n * This function returns the formatter for the Y-axis tick values.\n * @returns The formatter for the Y-axis tick values.\n * internally used by the YAxis component reCharts\n */\nconst numberTickFormatter = (value: number) => {\n  // Format the Y-axis tick values with abbreviations\n  if (typeof value === \"number\") {\n    const absValue = Math.abs(value);\n\n    if (absValue >= 1e12) {\n      return (value / 1e12).toFixed(absValue >= 10e12 ? 0 : 1) + \"T\";\n    } else if (absValue >= 1e9) {\n      return (value / 1e9).toFixed(absValue >= 10e9 ? 0 : 1) + \"B\";\n    } else if (absValue >= 1e6) {\n      return (value / 1e6).toFixed(absValue >= 10e6 ? 0 : 1) + \"M\";\n    } else if (absValue >= 1e3) {\n      return (value / 1e3).toFixed(absValue >= 10e3 ? 0 : 1) + \"K\";\n    } else {\n      // For values < 1000, show only 1 decimal place if there's a decimal\n      if (value % 1 !== 0) {\n        return value.toFixed(2);\n      }\n      return value.toString();\n    }\n  }\n  return String(value);\n};\n\nexport { numberTickFormatter };\n","import { useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { AreaChartData } from \"../AreaChart\";\nimport { BarChartData } from \"../BarChart\";\nimport { LineChartData } from \"../LineChart\";\nimport { ScatterPoint } from \"../ScatterChart/types\";\nimport { numberTickFormatter } from \"../utils\";\nimport { useCanvasContextForLabelSize } from \"./useCanvasContextForLabelSize\";\n\nconst DEFAULT_Y_AXIS_WIDTH = 40;\nconst MIN_Y_AXIS_WIDTH = 20;\nconst MAX_Y_AXIS_WIDTH = 200;\nconst LABEL_PADDING = 10;\n\nexport const useYAxisLabelWidth = (\n  data: AreaChartData | LineChartData | BarChartData | ScatterPoint[],\n  dataKeys: string[],\n) => {\n  const context = useCanvasContextForLabelSize();\n  const [maxLabelWidthReceived, setMaxLabelWidthReceived] = useState(0);\n\n  const maxLabelWidth = useMemo(() => {\n    if (typeof window === \"undefined\" || !data || data.length === 0 || !dataKeys.length) {\n      return DEFAULT_Y_AXIS_WIDTH;\n    }\n\n    if (!context) {\n      return DEFAULT_Y_AXIS_WIDTH;\n    }\n\n    let maxWidth = 0;\n\n    // Measure all possible Y-axis values\n    dataKeys.forEach((key) => {\n      // Get all unique values for this data key we basically want to get the max width of the values\n      const values = [\n        ...new Set(data.map((item) => item[key]).filter((v) => v != null && typeof v === \"number\")),\n      ];\n\n      values.forEach((value) => {\n        const displayValue = numberTickFormatter(value);\n        const textWidth = context.measureText(displayValue).width;\n\n        maxWidth = Math.max(maxWidth, textWidth);\n      });\n    });\n\n    // Add padding for better visual appearance\n    const totalWidth = Math.ceil(maxWidth) + LABEL_PADDING; // 5px padding on each side\n\n    // Clamp the width between MIN and MAX values\n    return Math.max(MIN_Y_AXIS_WIDTH, Math.min(MAX_Y_AXIS_WIDTH, totalWidth));\n  }, [data, dataKeys, context]);\n\n  const maxLabelWidthRef = useRef(maxLabelWidth);\n  maxLabelWidthRef.current = maxLabelWidthReceived || maxLabelWidth;\n\n  const setLabelWidth = useCallback(\n    (displayValue: string) => {\n      const textWidth = context.measureText(displayValue).width + LABEL_PADDING;\n      setMaxLabelWidthReceived((currentWidth) => Math.max(currentWidth, textWidth));\n    },\n    [context],\n  );\n\n  return { yAxisWidth: maxLabelWidthRef.current, setLabelWidth };\n};\n","import React, { useLayoutEffect, useRef } from \"react\";\n\nexport interface ActiveDotProps {\n  cx?: number;\n  cy?: number;\n  payload?: any;\n  value?: any;\n  fill?: string;\n  stroke?: string;\n}\n\nexport const ActiveDot: React.FC<ActiveDotProps> = (props) => {\n  const { cx, cy, fill, stroke } = props;\n  const ref = useRef<SVGGElement>(null);\n\n  useLayoutEffect(() => {\n    if (ref.current) {\n      const parent = ref.current.parentElement?.parentElement;\n      const dotGroup = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n      const circle1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n      circle1.setAttribute(\"cx\", String(cx));\n      circle1.setAttribute(\"cy\", String(cy));\n      circle1.setAttribute(\"r\", \"4\");\n      circle1.setAttribute(\"fill\", \"var(--openui-foreground)\");\n      circle1.setAttribute(\"stroke\", \"var(--openui-foreground)\");\n      circle1.setAttribute(\"stroke-width\", \"1\");\n\n      const circle2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n      circle2.setAttribute(\"cx\", String(cx));\n      circle2.setAttribute(\"cy\", String(cy));\n      circle2.setAttribute(\"r\", \"2\");\n      circle2.setAttribute(\"fill\", fill || \"var(--color-bg)\");\n      circle2.setAttribute(\"stroke\", stroke || \"transparent\");\n      circle2.setAttribute(\"stroke-width\", \"0\");\n\n      dotGroup.appendChild(circle1);\n      dotGroup.appendChild(circle2);\n      if (parent) {\n        parent.appendChild(dotGroup);\n      }\n\n      return () => {\n        dotGroup.remove();\n      };\n    }\n    return undefined;\n  });\n\n  if (cx === undefined || cy === undefined || cx === null || cy === null) {\n    return null;\n  }\n\n  return <g ref={ref}></g>;\n};\n","import { CartesianGrid } from \"recharts\";\n\nexport const cartesianGrid = () => gridCartesianGrid({ vertical: false });\n\nexport const verticalCartesianGrid = () => gridCartesianGrid({ horizontal: false });\n\nexport const gridCartesianGrid = (props: { vertical?: boolean; horizontal?: boolean }) => (\n  <CartesianGrid\n    vertical={props.vertical ?? true}\n    horizontal={props.horizontal ?? true}\n    fillOpacity={1}\n    strokeOpacity={1}\n    strokeWidth={1}\n    strokeDasharray=\"0\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    stroke=\"currentColor\"\n    className=\"openui-chart-cartesian-grid\"\n  />\n);\n","import { useMemo } from \"react\";\nimport { useCanvasContextForLabelSize } from \"../../../hooks/useCanvasContextForLabelSize\";\nimport { LegendItem } from \"../../../types\";\n\nconst CHARACTER_WIDTH = 7; // Fallback width per character\nconst INDICATOR_WIDTH = 10;\nconst GAP_WIDTH = 12;\n\ninterface UseDefaultLegendProps {\n  items: LegendItem[];\n  containerWidth?: number;\n  buttonWidth?: number;\n  isExpanded: boolean;\n}\n\ninterface UseDefaultLegendResult {\n  displayItems: LegendItem[];\n  hasMoreItems: boolean;\n  toggleButtonText: string;\n}\n\nexport const useDefaultLegend = ({\n  items,\n  containerWidth,\n  buttonWidth,\n  isExpanded,\n}: UseDefaultLegendProps): UseDefaultLegendResult => {\n  const canvasContext = useCanvasContextForLabelSize();\n\n  const calculateItemWidth = useMemo(\n    () =>\n      (item: LegendItem): number => {\n        let displayText = item.label;\n\n        // If percentage is provided, include it in the width calculation\n        if (item.percentage !== undefined) {\n          displayText += ` (${item.percentage.toFixed(1)}%)`;\n        }\n\n        if (canvasContext) {\n          // If canvas is supported, measure text width accurately\n          return canvasContext.measureText(displayText).width + INDICATOR_WIDTH + GAP_WIDTH;\n        }\n\n        // Fallback for SSR or if canvas is not supported\n        return displayText.length * CHARACTER_WIDTH + INDICATOR_WIDTH + GAP_WIDTH;\n      },\n    [canvasContext],\n  );\n\n  const { visibleItems, hasMoreItems } = useMemo(() => {\n    if (!containerWidth || items.length === 0) {\n      return { visibleItems: items, hasMoreItems: false };\n    }\n\n    const availableWidth = containerWidth - (buttonWidth ?? 0);\n    let currentWidth = 0;\n    let visibleCount = 0;\n\n    for (let i = 0; i < items.length; i++) {\n      const item = items[i];\n      if (!item) continue;\n\n      const itemWidth = calculateItemWidth(item);\n      // Add gap between items except for the first one\n      const requiredWidth = visibleCount > 0 ? itemWidth + GAP_WIDTH : itemWidth;\n\n      if (currentWidth + requiredWidth <= availableWidth) {\n        currentWidth += requiredWidth;\n        visibleCount++;\n      } else {\n        break;\n      }\n    }\n    // If all items fit within available width, show all items\n    if (visibleCount === items.length) {\n      return { visibleItems: items, hasMoreItems: false };\n    }\n\n    // If no items fit within available width, show at least the first item\n    if (visibleCount === 0 && items[0]) {\n      return {\n        visibleItems: [items[0]], // Show first item\n        hasMoreItems: items.length > 1, // Has more if there are additional items\n      };\n    }\n\n    return {\n      visibleItems: items.slice(0, visibleCount),\n      hasMoreItems: items.length > visibleCount,\n    };\n  }, [items, containerWidth, buttonWidth, calculateItemWidth]);\n\n  const displayItems = useMemo(\n    () => (isExpanded ? items : visibleItems),\n    [isExpanded, items, visibleItems],\n  );\n\n  const toggleButtonText = useMemo(() => {\n    if (isExpanded) {\n      return \"Show Less\";\n    }\n    const hiddenCount = items.length - visibleItems.length;\n    return `${hiddenCount} more`;\n  }, [isExpanded, items.length, visibleItems.length]);\n\n  return {\n    displayItems,\n    hasMoreItems,\n    toggleButtonText,\n  };\n};\n","import clsx from \"clsx\";\nimport { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport React, { memo, useCallback, useState } from \"react\";\nimport { Button } from \"../../../Button/Button\";\nimport { type LegendItem } from \"../../types\";\nimport { useDefaultLegend } from \"./hooks/useDefaultLegend\";\n\ninterface DefaultLegendProps {\n  items: LegendItem[];\n  className?: string;\n  yAxisLabel?: React.ReactNode;\n  xAxisLabel?: React.ReactNode;\n  containerWidth?: number;\n  isExpanded: boolean;\n  setIsExpanded: (isExpanded: boolean) => void;\n  style?: React.CSSProperties;\n}\n\nconst DefaultLegend = memo(\n  React.forwardRef<HTMLDivElement, DefaultLegendProps>(\n    (\n      {\n        items,\n        className,\n        yAxisLabel,\n        xAxisLabel,\n        containerWidth,\n        isExpanded,\n        setIsExpanded,\n        style,\n      },\n      ref,\n    ) => {\n      const [buttonWidth, setButtonWidth] = useState(0);\n      const { displayItems, hasMoreItems, toggleButtonText } = useDefaultLegend({\n        items,\n        containerWidth,\n        buttonWidth,\n        isExpanded,\n      });\n\n      // We use a callback ref to measure the button's width as soon as it's mounted.\n      // This is more reliable than useEffect with ref.current in the dependency array,\n      // as it correctly triggers a re-render when the node is available.\n      // This is a workaround for the fact that the button's width is not available immediately.\n      // and we need the actual button width to calculate the layout of the legend items.\n      const buttonRef = useCallback(\n        (node: HTMLButtonElement | null) => {\n          if (node) {\n            if (node.clientWidth !== buttonWidth) {\n              setButtonWidth(node.clientWidth);\n            }\n          }\n        },\n        [buttonWidth],\n      );\n\n      const handleToggleExpanded = () => {\n        setIsExpanded(!isExpanded);\n      };\n\n      const showToggleButton = hasMoreItems;\n\n      return (\n        <div\n          ref={ref}\n          className={clsx(\"openui-chart-legend-container openui-chart-legend--bottom\", className)}\n          style={style}\n        >\n          {/* this is x and y axis labels container*/}\n          {(xAxisLabel || yAxisLabel) && (\n            <div className=\"openui-chart-legend-axis-label-container\">\n              {xAxisLabel && (\n                <span className=\"openui-chart-legend-axis-label\">\n                  X-Axis: <span className=\"openui-chart-legend-axis-label-text\">{xAxisLabel}</span>\n                </span>\n              )}\n              {yAxisLabel && (\n                <span className=\"openui-chart-legend-axis-label\">\n                  Y-Axis: <span className=\"openui-chart-legend-axis-label-text\">{yAxisLabel}</span>\n                </span>\n              )}\n            </div>\n          )}\n          {/* this is the legend items container*/}\n          <div\n            className={clsx(\"openui-chart-legend\", {\n              \"openui-chart-legend--expanded\": isExpanded,\n              \"openui-chart-legend--collapsed\": !isExpanded && showToggleButton,\n            })}\n          >\n            {displayItems.map((item) => (\n              <div key={item.key} className=\"openui-chart-legend-item\">\n                {item.icon ? (\n                  <item.icon />\n                ) : (\n                  <div\n                    className=\"openui-chart-legend-item-indicator\"\n                    style={{ backgroundColor: item.color }}\n                  />\n                )}\n                <div className=\"openui-chart-legend-item-label-container\">\n                  <span className=\"openui-chart-legend-item-label\">{item.label}</span>\n                  {item.percentage !== undefined && (\n                    <span className=\"openui-chart-legend-item-percentage\">\n                      {item.percentage.toFixed(1)}%\n                    </span>\n                  )}\n                </div>\n              </div>\n            ))}\n\n            {showToggleButton && (\n              <Button\n                variant=\"tertiary\"\n                size=\"small\"\n                ref={buttonRef}\n                className=\"openui-chart-legend-toggle-button\"\n                onClick={handleToggleExpanded}\n                iconRight={\n                  isExpanded ? (\n                    <ChevronUpIcon className=\"openui-chart-legend-toggle-button-icon\" />\n                  ) : (\n                    <ChevronDownIcon className=\"openui-chart-legend-toggle-button-icon\" />\n                  )\n                }\n              >\n                {toggleButtonText}\n              </Button>\n            )}\n          </div>\n        </div>\n      );\n    },\n  ),\n);\n\nDefaultLegend.displayName = \"DefaultLegend\";\nexport { DefaultLegend };\nexport type { DefaultLegendProps };\n","import React, { FunctionComponent, useMemo } from \"react\";\n\ninterface LineInBarShapeProps {\n  x?: number;\n  y?: number;\n  width?: number;\n  height?: number;\n  fill?: string;\n  stroke?: string;\n  strokeWidth?: number | string;\n  radius?: number | number[];\n  internalLineColor?: string;\n  internalLineWidth?: number;\n  isHovered?: boolean;\n  hoveredCategory?: string | number | null;\n  categoryKey?: string;\n  payload?: any;\n  variant?: \"grouped\" | \"stacked\";\n  stackGap?: number;\n  orientation?: \"vertical\" | \"horizontal\";\n  hasNegativeValueInStack?: boolean;\n  [key: string]: any; // Allow other props from Recharts\n}\n\nconst DEFAULT_STACK_GAP = 1;\nconst MIN_LINE_DIMENSION = 8; // For internal line visibility (height/width threshold)\nconst MIN_BAR_WIDTH_FOR_LINE = 3; // Minimum bar width to show internal line in vertical mode\nconst LINE_PADDING = 6;\nconst MIN_GROUP_BAR_HEIGHT = 2; // For vertical bars\nconst MIN_STACKED_BAR_HEIGHT = 4; // For vertical bars\nconst MIN_BAR_WIDTH = 2; // For horizontal bars\n\nconst LineInBarShape: FunctionComponent<LineInBarShapeProps> = React.memo((props) => {\n  const {\n    x = 0,\n    y = 0,\n    width = 0,\n    height = 0,\n    fill,\n    radius: r,\n    stroke,\n    strokeWidth,\n    internalLineColor: iLineColor,\n    internalLineWidth: iLineWidth,\n    isHovered,\n    hoveredCategory,\n    categoryKey,\n    payload,\n    variant = \"grouped\",\n    stackGap = DEFAULT_STACK_GAP,\n    orientation = \"vertical\",\n    hasNegativeValueInStack,\n  } = props;\n\n  const isVertical = orientation === \"vertical\";\n  const isNegative = isVertical ? height < 0 : width < 0;\n\n  const w = isNegative && !isVertical ? -width : width;\n  const h = isNegative && isVertical ? -height : height;\n\n  const x_ = isNegative && !isVertical ? x + width : x;\n  const y_ = isNegative && isVertical ? y + height : y;\n\n  /**\n   * Calculates the corner radii for the bar.\n   * This logic ensures that only the \"outer\" corners of a bar are rounded,\n   * depending on its orientation (vertical/horizontal) and whether it's a\n   * positive or negative value.\n   *\n   * - For vertical bars, top corners are rounded for positive values, and\n   *   bottom corners for negative values.\n   * - For horizontal bars, right corners are rounded for positive values, and\n   *   left corners for negative values.\n   *\n   * If the bar's dimensions are below a certain threshold, no rounding is applied.\n   * The `radius` prop can be a single number or an array `[rTL, rTR, rBR, rBL]`.\n   */\n  const { rTL, rTR, rBL, rBR } = useMemo(() => {\n    // This code calculates which corners of a bar should be rounded based on several factors:\n\n    // First check if the bar is too small to have rounded corners\n    const minDimension = isVertical ? MIN_GROUP_BAR_HEIGHT : MIN_BAR_WIDTH;\n    const dimension = isVertical ? h : w;\n\n    // If bar is too small, return no rounded corners\n    if (\n      (variant === \"grouped\" && dimension < minDimension) ||\n      (variant === \"stacked\" && dimension < MIN_STACKED_BAR_HEIGHT)\n    ) {\n      return { rTL: 0, rTR: 0, rBL: 0, rBR: 0 };\n    }\n\n    // Check bar thickness and remove rounded corners if too thin\n    // For vertical bars: check width, for horizontal bars: check height\n    const barThickness = isVertical ? w : h;\n    if (barThickness < 7) {\n      return { rTL: 0, rTR: 0, rBL: 0, rBR: 0 };\n    }\n\n    // If radius is an array, apply specific radius to each corner\n    if (Array.isArray(r)) {\n      // The radius array is expected to be in the format [rTL, rTR, rBR, rBL].\n      return { rTL: r[0] || 0, rTR: r[1] || 0, rBR: r[2] || 0, rBL: r[3] || 0 };\n    } else if (typeof r === \"number\") {\n      // If radius is a single number, apply it consistently based on orientation\n      if (isVertical) {\n        if (isNegative) return { rTL: 0, rTR: 0, rBL: r, rBR: r };\n        return { rTL: r, rTR: r, rBL: 0, rBR: 0 };\n      }\n      // For horizontal bars\n      if (isNegative) return { rTL: r, rTR: 0, rBL: r, rBR: 0 };\n      return { rTL: 0, rTR: r, rBL: 0, rBR: r };\n    }\n    // Default case - no rounded corners\n    return { rTL: 0, rTR: 0, rBL: 0, rBR: 0 };\n  }, [r, variant, h, w, isVertical, isNegative]);\n\n  // This code calculates the opacity of a bar based on hover state:\n  // - Returns 1 (fully opaque) if:\n  //   - Chart is not being hovered (isHovered is false)\n  //   - No category is being hovered (hoveredCategory is null)\n  //   - Missing required data (payload or categoryKey)\n  // - If chart is being hovered:\n  //   - Returns 1 if this bar's category matches the hovered category\n  //   - Returns 0.4 (40% opacity) if this bar's category doesn't match\n  const opacity = useMemo(() => {\n    if (!isHovered || hoveredCategory === null || !payload || !categoryKey) return 1;\n    return payload[categoryKey] === hoveredCategory ? 1 : 0.4;\n  }, [isHovered, hoveredCategory, payload, categoryKey]);\n\n  // This code adjusts the dimensions and position of bars in the chart:\n  // - For vertical bars:\n  //   - Reduces height by stackGap if stacked variant\n  //   - Enforces minimum height based on variant (grouped vs stacked)\n  //   - Adjusts Y position for positive values to align from bottom\n  // - For horizontal bars:\n  //   - Reduces width by stackGap if stacked variant\n  //   - Enforces minimum width\n  // Returns adjusted x, y coordinates and dimensions while preserving original values\n  const { adjustedX, adjustedY, adjustedWidth, adjustedHeight } = useMemo(() => {\n    // Initialize final dimensions with original values\n    let finalX = x_; // Starting x position\n    let finalY = y_; // Starting y position\n    let finalWidth = w; // Original width\n    let finalHeight = h; // Original height\n\n    if (isVertical) {\n      // For vertical bars:\n\n      // If stacked bars, reduce height by gap between bars\n      if (variant === \"stacked\" && stackGap > 0) {\n        finalHeight = h - stackGap;\n      }\n\n      // Enforce minimum height based on variant\n      if (h > 0) {\n        const minHeight =\n          variant === \"grouped\"\n            ? MIN_GROUP_BAR_HEIGHT // Minimum 2px for grouped bars\n            : MIN_STACKED_BAR_HEIGHT - stackGap; // Minimum 4px minus gap for stacked\n        finalHeight = Math.max(finalHeight, minHeight);\n      }\n\n      // For positive values, adjust Y to align from bottom\n      if (!isNegative) {\n        if (variant === \"stacked\" && stackGap > 0 && hasNegativeValueInStack) {\n          finalY = y + h - finalHeight - stackGap;\n        } else {\n          finalY = y + h - finalHeight;\n        }\n      }\n    } else {\n      // For horizontal bars:\n\n      // If stacked, reduce width by gap between bars\n      if (variant === \"stacked\" && stackGap > 0) {\n        finalWidth = w - stackGap;\n      }\n\n      // Enforce minimum width of 2px\n      if (w > 0) {\n        finalWidth = Math.max(finalWidth, MIN_BAR_WIDTH);\n      }\n    }\n\n    // Return adjusted dimensions and positions\n    return {\n      adjustedX: finalX,\n      adjustedY: finalY,\n      adjustedWidth: finalWidth,\n      adjustedHeight: finalHeight,\n    };\n  }, [variant, stackGap, x, y, w, h, isVertical, isNegative, x_, y_]);\n\n  /**\n   * Generates the SVG path for the bar.\n   * This code creates the SVG path string for a bar with rounded corners.\n   * The path drawing logic changes based on:\n   * 1. Bar orientation (vertical vs horizontal)\n   * 2. Value sign (positive vs negative)\n   *\n   * The SVG path is drawn using commands:\n   * - M x,y: Move to point (x,y) without drawing\n   * - L x,y: Draw line to point (x,y)\n   * - A rx,ry angle,large-arc,sweep x,y: Draw arc with radius rx,ry to point (x,y)\n   *   The arc parameters control:\n   *   - angle: rotation of arc (0 = no rotation)\n   *   - large-arc: 0 = small arc, 1 = large arc\n   *   - sweep: 0 = counter-clockwise, 1 = clockwise\n   * - Z: Close path by drawing line back to start\n   *\n   * For rounded corners, we:\n   * 1. Move to start point\n   * 2. Draw straight edges\n   * 3. For each corner that should be rounded:\n   *    - Stop short of corner by radius amount\n   *    - Draw arc with specified radius to next edge\n   *    - Continue with straight edges\n   * 4. Close path\n   */\n\n  const path = useMemo(() => {\n    // This code generates SVG path strings to draw bars with rounded corners\n    // The path drawing logic changes based on:\n    // 1. Bar orientation (vertical vs horizontal)\n    // 2. Value sign (positive vs negative)\n\n    if (isVertical) {\n      // For vertical bars\n      if (isNegative) {\n        // Draw downward pointing bar with rounded bottom corners if specified\n        // This path draws a vertical bar with rounded bottom corners for negative values\n        // Here's how each command works:\n        // 1. M ${x},${adjustedY} - Move to top-left corner\n        // 2. L ${x + adjustedWidth},${adjustedY} - Draw line to top-right corner\n        // 3. L ${x + adjustedWidth},${adjustedY + adjustedHeight - rBR} - Draw line down right side, stopping before bottom-right corner\n        // 4. If bottom-right radius (rBR) > 0:\n        //    A ${rBR},${rBR} 0 0 1 ${x + adjustedWidth - rBR},${adjustedY + adjustedHeight}\n        //    Draw arc: radius rBR, no rotation (0), small arc (0), clockwise (1), end at bottom-right rounded corner\n        //    Else: Draw straight line to bottom-right corner\n        // 5. L ${x + rBL},${adjustedY + adjustedHeight} - Draw line left along bottom, stopping before bottom-left corner\n        // 6. If bottom-left radius (rBL) > 0:\n        //    A ${rBL},${rBL} 0 0 1 ${x},${adjustedY + adjustedHeight - rBL}\n        //    Draw arc: radius rBL, no rotation (0), small arc (0), clockwise (1), end at bottom-left rounded corner\n        //    Else: Draw straight line to bottom-left corner\n        // 7. Z - Close path by drawing line back to start\n        return `\n          M ${x},${adjustedY}\n          L ${x + adjustedWidth},${adjustedY}\n          L ${x + adjustedWidth},${adjustedY + adjustedHeight - rBR}\n          ${rBR > 0 ? `A ${rBR},${rBR} 0 0 1 ${x + adjustedWidth - rBR},${adjustedY + adjustedHeight}` : `L ${x + adjustedWidth},${adjustedY + adjustedHeight}`}\n          L ${x + rBL},${adjustedY + adjustedHeight}\n          ${rBL > 0 ? `A ${rBL},${rBL} 0 0 1 ${x},${adjustedY + adjustedHeight - rBL}` : `L ${x},${adjustedY + adjustedHeight}`}\n          Z`;\n      }\n      // Draw upward pointing bar with rounded top corners if specified\n      return `\n        M ${x},${adjustedY + rTL}\n        ${rTL > 0 ? `A ${rTL},${rTL} 0 0 1 ${x + rTL},${adjustedY}` : `L ${x},${adjustedY}`}\n        L ${x + adjustedWidth - rTR},${adjustedY}\n        ${rTR > 0 ? `A ${rTR},${rTR} 0 0 1 ${x + adjustedWidth},${adjustedY + rTR}` : `L ${x + adjustedWidth},${adjustedY}`}\n        L ${x + adjustedWidth},${adjustedY + adjustedHeight}\n        L ${x},${adjustedY + adjustedHeight}\n        Z`;\n    }\n\n    // For horizontal bars\n    if (isNegative) {\n      // Draw leftward pointing bar with rounded left corners if specified\n      return `\n      M ${adjustedX + rTL},${y}\n      ${rTL > 0 ? `A ${rTL},${rTL} 0 0 0 ${adjustedX},${y + rTL}` : `L ${adjustedX},${y}`}\n      L ${adjustedX},${y + height - rBL}\n      ${rBL > 0 ? `A ${rBL},${rBL} 0 0 0 ${adjustedX + rBL},${y + height}` : `L ${adjustedX},${y + height}`}\n      L ${adjustedX + adjustedWidth},${y + height}\n      L ${adjustedX + adjustedWidth},${y}\n      Z`;\n    }\n    // Draw rightward pointing bar with rounded right corners if specified\n    return `\n      M ${adjustedX},${y}\n      L ${adjustedX + adjustedWidth - rTR},${y}\n      ${rTR > 0 ? `A ${rTR},${rTR} 0 0 1 ${adjustedX + adjustedWidth},${y + rTR}` : `L ${adjustedX + adjustedWidth},${y}`}\n      L ${adjustedX + adjustedWidth},${y + height - rBR}\n      ${rBR > 0 ? `A ${rBR},${rBR} 0 0 1 ${adjustedX + adjustedWidth - rBR},${y + height}` : `L ${adjustedX + adjustedWidth},${y + height}`}\n      L ${adjustedX},${y + height}\n      Z`;\n  }, [\n    x,\n    y,\n    adjustedX,\n    adjustedY,\n    adjustedWidth,\n    adjustedHeight,\n    height,\n    rTL,\n    rTR,\n    rBL,\n    rBR,\n    isVertical,\n    isNegative,\n  ]);\n\n  const lineCoords = useMemo(() => {\n    if (isVertical) {\n      // For vertical bars: hide line if bar width < 3px (too thin) OR height < 8px (too short)\n      // This ensures thin bars don't have a visible internal line that looks awkward\n      if (width <= 0 || width < MIN_BAR_WIDTH_FOR_LINE || adjustedHeight < MIN_LINE_DIMENSION) {\n        return null;\n      }\n      const centerX = x + width / 2;\n      return {\n        x1: centerX,\n        y1: adjustedY + LINE_PADDING,\n        x2: centerX,\n        y2: adjustedY + adjustedHeight - LINE_PADDING,\n      };\n    }\n    // Horizontal bars: hide line if width < 8px OR height <= 0\n    if (adjustedWidth < MIN_LINE_DIMENSION || height <= 0) return null;\n    const centerY = y + height / 2;\n    return {\n      x1: adjustedX + LINE_PADDING,\n      y1: centerY,\n      x2: adjustedX + adjustedWidth - LINE_PADDING,\n      y2: centerY,\n    };\n  }, [x, y, adjustedX, adjustedY, width, height, adjustedWidth, adjustedHeight, isVertical]);\n\n  return (\n    <g>\n      <path d={path} fill={fill} stroke={stroke} strokeWidth={strokeWidth} opacity={opacity} />\n      {lineCoords && (\n        <line\n          x1={lineCoords.x1}\n          y1={lineCoords.y1}\n          x2={lineCoords.x2}\n          y2={lineCoords.y2}\n          stroke={iLineColor}\n          strokeWidth={iLineWidth}\n          strokeLinecap=\"round\"\n          opacity={opacity}\n        />\n      )}\n    </g>\n  );\n});\n\nLineInBarShape.displayName = \"LineInBarShape\";\n\nexport { LineInBarShape };\n","import type { Placement } from \"@floating-ui/react-dom\";\nimport { autoUpdate, flip, hide, offset, useFloating } from \"@floating-ui/react-dom\";\nimport clsx from \"clsx\";\nimport React, { useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useTheme } from \"../../../ThemeProvider\";\n\ninterface FloatingUIPortalProps {\n  children: React.ReactNode;\n  className?: string;\n  chartId?: string;\n  portalContainer?: React.RefObject<HTMLElement | null>;\n  position?: Partial<{ x: number; y: number }>;\n  placement?: Placement;\n  offsetDistance?: number;\n}\n\nexport const FloatingUIPortal: React.FC<FloatingUIPortalProps> = ({\n  children,\n  className = \"\",\n  chartId,\n  portalContainer,\n  position,\n  placement = \"right-start\",\n  offsetDistance = 20,\n}) => {\n  const { refs, floatingStyles, update } = useFloating({\n    placement,\n    middleware: [offset(offsetDistance), flip(), hide()],\n    whileElementsMounted: autoUpdate,\n  });\n\n  const { portalThemeClassName } = useTheme();\n\n  useEffect(() => {\n    if (position) {\n      update();\n    }\n  }, [position, update]);\n\n  return (\n    <>\n      <div\n        ref={refs.setReference}\n        style={{\n          position: \"absolute\",\n          top: position?.y,\n          left: position?.x,\n        }}\n      />\n      {createPortal(\n        <div\n          ref={refs.setFloating}\n          className={clsx(\"openui-portal-tooltip\", portalThemeClassName, className)}\n          data-chart={chartId}\n          style={floatingStyles}\n        >\n          {children}\n        </div>,\n        portalContainer?.current || document.body,\n      )}\n    </>\n  );\n};\n","const tooltipNumberFormatter = (value: number) => {\n  const isNegative = value < 0;\n  const absValue = Math.abs(value);\n\n  if (absValue < 100000) {\n    return (isNegative ? \"-\" : \"\") + absValue.toLocaleString();\n  }\n\n  const units = [\"\", \"K\", \"M\", \"B\", \"T\"];\n  let unitIndex = 0;\n  let scaledValue = absValue;\n\n  while (scaledValue >= 1000 && unitIndex < units.length - 1) {\n    scaledValue /= 1000;\n    unitIndex++;\n  }\n\n  // Format with at most 1 decimal place\n  const formattedValue = Math.floor(scaledValue * 10) / 10;\n\n  return (isNegative ? \"-\" : \"\") + `${formattedValue}${units[unitIndex]}`;\n};\n\nexport { tooltipNumberFormatter };\n","import clsx from \"clsx\";\nimport { forwardRef, memo, useEffect, useMemo, useState } from \"react\";\nimport * as RechartsPrimitive from \"recharts\";\nimport { ChartStyle, getPayloadConfigFromPayload, useChart } from \"../../../Charts/Charts\";\nimport { useSideBarTooltip } from \"../../context/SideBarTooltipContext\";\nimport { FloatingUIPortal } from \"./FloatingUIPortal\";\nimport { tooltipNumberFormatter } from \"./utils\";\n\nconst DEFAULT_INDICATOR = \"dot\" as const;\n\ntype CustomTooltipContentProps = React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n  React.ComponentProps<\"div\"> & {\n    hideLabel?: boolean;\n    hideIndicator?: boolean;\n    indicator?: \"line\" | \"dot\" | \"dashed\";\n    nameKey?: string;\n    labelKey?: string;\n    showPercentage?: boolean;\n    portalContainer?: React.RefObject<HTMLElement | null>;\n    parentRef: React.RefObject<HTMLElement | null>;\n  };\n\n/**\n * Custom tooltip content component for floating tooltips\n * Mirrors the functionality of ChartTooltipContent but works with FloatingUIPortal\n */\nfunction CustomTooltipContentRender(\n  props: CustomTooltipContentProps,\n  ref: React.ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    active,\n    payload,\n    className,\n    indicator = DEFAULT_INDICATOR,\n    hideLabel = false,\n    hideIndicator = false,\n    label,\n    labelFormatter,\n    labelClassName,\n    formatter,\n    color,\n    nameKey,\n    labelKey,\n    showPercentage = false,\n    portalContainer,\n    parentRef,\n  } = props;\n\n  const { config, id } = useChart();\n  const { isSideBarTooltipOpen } = useSideBarTooltip();\n  const isGreaterThanTen = !!(payload?.length && payload.length > 10);\n  const remainingItems = payload && isGreaterThanTen ? payload.length - 5 : 0;\n  // this state is used to forcefully hide the tooltip when the user touches outside of the parent element\n  // this is not handled by recharts\n  const [forcefullyHideTooltip, setForcefullyHideTooltip] = useState(false);\n  const [parentScrollPosition, setParentScrollPosition] = useState({\n    x: 0,\n    y: 0,\n    width: 0,\n    height: 0,\n  });\n\n  const tooltipLabel = useMemo(() => {\n    if (hideLabel || !payload?.length) {\n      return null;\n    }\n\n    const [item] = payload;\n    const key = `${labelKey ?? item?.dataKey ?? item?.name ?? \"value\"}`;\n    const itemConfig = getPayloadConfigFromPayload(config, item, key);\n    const value =\n      !labelKey && typeof label === \"string\" ? config[label]?.label || label : itemConfig?.label;\n\n    // this is active when we pass a labelFormatter prop to the recharts tooltip\n    // normally we would not need this, but it's useful for customizing the label\n    if (labelFormatter) {\n      return (\n        <div className={clsx(\"openui-chart-tooltip-label-heavy\", labelClassName)}>\n          {labelFormatter(value, payload)}\n        </div>\n      );\n    }\n\n    if (!value) {\n      return null;\n    }\n\n    return <div className={clsx(\"openui-chart-tooltip-label\", labelClassName)}>{value}</div>;\n  }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n  const nestLabel = useMemo(\n    () => payload?.length === 1 && indicator !== DEFAULT_INDICATOR,\n    [payload?.length, indicator],\n  );\n\n  const payloadItems = useMemo(() => {\n    if (!payload?.length) {\n      return [];\n    }\n\n    const renderPayloadItem = (item: any, index: number, isTwoItemsLayout: boolean) => {\n      const key = `${nameKey ?? item.name ?? item.dataKey ?? \"value\"}`;\n      const itemConfig = getPayloadConfigFromPayload(config, item, key);\n      const indicatorColor = (color ?? item.payload?.fill) || item.color;\n\n      return (\n        <div\n          key={`${item.dataKey}-${index}`}\n          className={clsx(\n            \"openui-chart-tooltip-content-item\",\n            !isTwoItemsLayout &&\n              indicator === DEFAULT_INDICATOR &&\n              \"openui-chart-tooltip-content-item--dot\",\n          )}\n        >\n          {formatter && item?.value !== undefined && item.name ? (\n            formatter(item.value, item.name, item, index, item.payload)\n          ) : (\n            <>\n              {itemConfig?.icon ? (\n                <itemConfig.icon />\n              ) : (\n                !hideIndicator && (\n                  <div\n                    className={clsx(\n                      \"openui-chart-tooltip-content-indicator\",\n                      `openui-chart-tooltip-content-indicator--${indicator}`,\n                      isTwoItemsLayout && \"openui-chart-tooltip-content-indicator--two-items\",\n                    )}\n                    style={\n                      {\n                        \"--color-bg\": indicatorColor,\n                        \"--color-border\": indicatorColor,\n                      } as React.CSSProperties\n                    }\n                  />\n                )\n              )}\n\n              <div\n                className={clsx(\n                  \"openui-chart-tooltip-content-value-wrapper\",\n                  isTwoItemsLayout && \"openui-chart-tooltip-content-value-wrapper--vertical\",\n                  nestLabel\n                    ? \"openui-chart-tooltip-content-value-wrapper--nested\"\n                    : \"openui-chart-tooltip-content-value-wrapper--standard\",\n                )}\n              >\n                <div className=\"openui-chart-tooltip-content-label\">\n                  {nestLabel && tooltipLabel}\n                  <span>{itemConfig?.label || item.name}</span>\n                </div>\n\n                {item.value !== undefined && (\n                  <span\n                    className={clsx(\n                      \"openui-chart-tooltip-content-value\",\n                      showPercentage && \"percentage\",\n                    )}\n                  >\n                    {typeof item.value === \"number\"\n                      ? tooltipNumberFormatter(item.value)\n                      : item.value}\n                    {showPercentage ? \"%\" : \"\"}\n                  </span>\n                )}\n              </div>\n            </>\n          )}\n          <div className=\"openui-chart-tooltip-content-item-separator\" />\n        </div>\n      );\n    };\n\n    // Handle two items layout\n    if (payload.length <= 2) {\n      return payload.map((item, index) => renderPayloadItem(item, index, true));\n    }\n\n    // Handle regular layout with potential truncation\n    const morphPayload = isGreaterThanTen ? payload.slice(0, 5) : payload;\n    return morphPayload.map((item, index) => renderPayloadItem(item, index, false));\n  }, [\n    payload,\n    nameKey,\n    config,\n    color,\n    indicator,\n    formatter,\n    hideIndicator,\n    nestLabel,\n    tooltipLabel,\n    showPercentage,\n  ]);\n\n  useEffect(() => {\n    const parent = parentRef.current;\n    if (!parent) {\n      return;\n    }\n\n    const touchHandler = (e: TouchEvent) => {\n      for (let i = 0; i < e.targetTouches.length; i++) {\n        const target = e.targetTouches[i]!.target as HTMLElement;\n        if (!parent.contains(target)) {\n          setForcefullyHideTooltip(true);\n          return;\n        }\n      }\n      setForcefullyHideTooltip(false);\n    };\n    document.body.addEventListener(\"touchstart\", touchHandler);\n\n    const scrollHandler = () => {\n      setParentScrollPosition({\n        x: parent.scrollLeft,\n        y: parent.scrollTop,\n        width: parent.clientWidth,\n        height: parent.clientHeight,\n      });\n    };\n\n    parent.addEventListener(\"scroll\", scrollHandler);\n\n    setParentScrollPosition({\n      x: parent.scrollLeft,\n      y: parent.scrollTop,\n      width: parent.clientWidth,\n      height: parent.clientHeight,\n    });\n\n    return () => {\n      document.body.removeEventListener(\"touchstart\", touchHandler);\n      parent.removeEventListener(\"scroll\", scrollHandler);\n    };\n  }, [parentRef.current]);\n\n  // Early return for inactive or empty payload - moved after all hooks\n  if (!active || !payload?.length || isSideBarTooltipOpen || forcefullyHideTooltip) {\n    return null;\n  }\n\n  const tooltipContent = (\n    <div ref={ref} className={clsx(\"openui-chart-tooltip\", className)}>\n      {!nestLabel && tooltipLabel}\n      <div className=\"openui-chart-tooltip-content-item-separator\" />\n      <div className=\"openui-chart-tooltip-content\">{payloadItems}</div>\n      {isGreaterThanTen && <div className=\"openui-chart-tooltip-content-item-separator\" />}\n      {isGreaterThanTen && (\n        <div className=\"openui-chart-tooltip-content-view-more\">\n          Click to view all {remainingItems}\n        </div>\n      )}\n    </div>\n  );\n  const coordinates = { x: props.coordinate?.x ?? 0, y: props.coordinate?.y ?? 0 };\n\n  if (\n    parentScrollPosition.x > coordinates.x ||\n    parentScrollPosition.y > coordinates.y ||\n    parentScrollPosition.width + parentScrollPosition.x < coordinates.x ||\n    parentScrollPosition.height + parentScrollPosition.y < coordinates.y\n  ) {\n    return null;\n  }\n\n  return (\n    <FloatingUIPortal chartId={id} portalContainer={portalContainer} position={props.coordinate}>\n      <ChartStyle id={id} config={config} />\n      {tooltipContent}\n    </FloatingUIPortal>\n  );\n}\n\nexport const CustomTooltipContent = memo(forwardRef(CustomTooltipContentRender));\n\nCustomTooltipContent.displayName = \"CustomTooltipContent\";\n","import clsx from \"clsx\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport React from \"react\";\nimport { IconButton } from \"../../../IconButton\";\n\ninterface ScrollButtonsHorizontalProps {\n  dataWidth: number;\n  effectiveWidth: number;\n  canScrollLeft: boolean;\n  canScrollRight: boolean;\n  isSideBarTooltipOpen: boolean;\n  onScrollLeft: () => void;\n  onScrollRight: () => void;\n}\n\nexport const ScrollButtonsHorizontal = React.memo(\n  ({\n    dataWidth,\n    effectiveWidth,\n    canScrollLeft,\n    canScrollRight,\n    isSideBarTooltipOpen,\n    onScrollLeft,\n    onScrollRight,\n  }: ScrollButtonsHorizontalProps) => {\n    if (dataWidth <= effectiveWidth) {\n      return null;\n    }\n\n    return (\n      <div className=\"openui-chart-horizontal-scroll-buttons-container\">\n        <IconButton\n          className={clsx(\n            \"openui-chart-horizontal-scroll-button openui-chart-horizontal-scroll-button--left\",\n            {\n              \"openui-chart-horizontal-scroll-button--disabled\": !canScrollLeft,\n            },\n          )}\n          icon={<ChevronLeft />}\n          variant=\"secondary\"\n          onClick={onScrollLeft}\n          size=\"2-extra-small\"\n          disabled={!canScrollLeft}\n          aria-label=\"Scroll left\"\n        />\n\n        <IconButton\n          className={clsx(\n            \"openui-chart-horizontal-scroll-button openui-chart-horizontal-scroll-button--right\",\n            {\n              \"openui-chart-horizontal-scroll-button--disabled\": !canScrollRight,\n              \"openui-chart-horizontal-scroll-button--SideBarTooltip\": isSideBarTooltipOpen,\n            },\n          )}\n          icon={<ChevronRight />}\n          variant=\"secondary\"\n          size=\"2-extra-small\"\n          onClick={onScrollRight}\n          disabled={!canScrollRight}\n          aria-label=\"Scroll right\"\n        />\n      </div>\n    );\n  },\n);\n\nScrollButtonsHorizontal.displayName = \"ScrollButtonsHorizontal\";\n","import clsx from \"clsx\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport React from \"react\";\nimport { IconButton } from \"../../../IconButton\";\n\ninterface ScrollButtonsVerticalProps {\n  dataHeight: number;\n  effectiveHeight: number;\n  canScrollUp: boolean;\n  canScrollDown: boolean;\n  isSideBarTooltipOpen: boolean;\n  onScrollUp: () => void;\n  onScrollDown: () => void;\n}\n\nexport const ScrollButtonsVertical = React.memo(\n  ({\n    dataHeight,\n    effectiveHeight,\n    canScrollUp,\n    canScrollDown,\n    isSideBarTooltipOpen,\n    onScrollUp,\n    onScrollDown,\n  }: ScrollButtonsVerticalProps) => {\n    if (dataHeight <= effectiveHeight) {\n      return null;\n    }\n\n    return (\n      <div className=\"openui-chart-vertical-scroll-buttons-container\">\n        <IconButton\n          className={clsx(\n            \"openui-chart-vertical-scroll-button openui-chart-vertical-scroll-button--up\",\n            {\n              \"openui-chart-vertical-scroll-button--disabled\": !canScrollUp,\n            },\n          )}\n          icon={<ChevronUp />}\n          variant=\"secondary\"\n          onClick={onScrollUp}\n          size=\"extra-small\"\n          disabled={!canScrollUp}\n          aria-label=\"Scroll up\"\n        />\n\n        <IconButton\n          className={clsx(\n            \"openui-chart-vertical-scroll-button openui-chart-vertical-scroll-button--down\",\n            {\n              \"openui-chart-vertical-scroll-button--disabled\": !canScrollDown,\n              \"openui-chart-vertical-scroll-button--SideBarTooltip\": isSideBarTooltipOpen,\n            },\n          )}\n          icon={<ChevronDown />}\n          variant=\"secondary\"\n          size=\"extra-small\"\n          onClick={onScrollDown}\n          disabled={!canScrollDown}\n          aria-label=\"Scroll down\"\n        />\n      </div>\n    );\n  },\n);\n\nScrollButtonsVertical.displayName = \"ScrollButtonsVertical\";\n","import { X } from \"lucide-react\";\nimport React, { useCallback, useMemo } from \"react\";\nimport { IconButton } from \"../../../IconButton\";\nimport { useSideBarTooltip } from \"../../context/SideBarTooltipContext\";\nimport { tooltipNumberFormatter } from \"../PortalTooltip/utils\";\n\ninterface SideBarTooltipProps {\n  height: number;\n}\n\n// Utility function for capitalizing strings\nconst capitalizeString = (str: string): string => {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nconst SideBarTooltip = React.memo(({ height }: SideBarTooltipProps) => {\n  const { setIsSideBarTooltipOpen, data } = useSideBarTooltip();\n\n  // if no data, close the tooltip\n  if (!data) {\n    setIsSideBarTooltipOpen(false);\n    return null;\n  }\n\n  const handleClose = useCallback(() => {\n    setIsSideBarTooltipOpen(false);\n  }, [setIsSideBarTooltipOpen]);\n\n  const processedValues = useMemo(() => {\n    return data.values?.map((value, index) => ({\n      ...value,\n      capitalizedLabel: capitalizeString(value.label),\n      isLast: index === data.values.length - 1,\n    }));\n  }, [data.values]);\n\n  const title = data.title;\n\n  return (\n    <div className=\"openui-chart-side-bar-tooltip\" style={{ height: `${height}px` }}>\n      <div className=\"openui-chart-side-bar-tooltip-header\">\n        <div className=\"openui-chart-side-bar-tooltip-title\">{title}</div>\n        <IconButton\n          icon={<X />}\n          size=\"extra-small\"\n          onClick={handleClose}\n          variant=\"secondary\"\n          className=\"openui-chart-side-bar-tooltip-close-button\"\n        />\n      </div>\n      <div className=\"openui-chart-side-bar-tooltip-content-item-separator\" />\n      <div className=\"openui-chart-side-bar-tooltip-content\" autoFocus>\n        {processedValues?.map((value, index) => (\n          <div key={index}>\n            <div className=\"openui-chart-side-bar-tooltip-content-item\">\n              <div\n                className=\"openui-chart-side-bar-tooltip-content-item-color\"\n                style={{ backgroundColor: value.color }}\n              />\n              <div className=\"openui-chart-side-bar-tooltip-content-item-label\">\n                {value.capitalizedLabel}\n              </div>\n              <div className=\"openui-chart-side-bar-tooltip-content-item-value\">\n                {tooltipNumberFormatter(value.value)}\n              </div>\n            </div>\n            {!value.isLast && (\n              <div className=\"openui-chart-side-bar-tooltip-content-item-separator\" />\n            )}\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n});\n\nSideBarTooltip.displayName = \"SideBarTooltip\";\n\nexport { SideBarTooltip };\n","import * as RadixSeparator from \"@radix-ui/react-separator\";\nimport clsx from \"clsx\";\n\nconst Separator = ({ className, ...props }: React.ComponentProps<typeof RadixSeparator.Root>) => {\n  return <RadixSeparator.Root className={clsx(\"openui-separator\", className)} {...props} />;\n};\n\nexport { Separator };\n","import clsx from \"clsx\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../../../Button\";\nimport { IconButton } from \"../../../IconButton\";\nimport { Separator } from \"../../../Separator\";\nimport { StackedLegendItem } from \"../../types\";\n\nexport type StackedLegendLayout = \"auto\" | \"showMore\" | \"scrollable\";\n\ninterface StackedLegendProps {\n  items: StackedLegendItem[];\n  onItemHover?: (key: string | null) => void;\n  activeKey?: string | null;\n  onLegendItemHover?: (index: number | null) => void;\n  containerWidth?: number;\n  title?: string;\n  separator?: boolean;\n  showTitle?: boolean;\n  layout?: StackedLegendLayout;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nconst formatPercentage = (value: number, total: number): string => {\n  const percentage = (value / total) * 100;\n  return `${percentage.toFixed(1)}%`;\n};\n\nconst ITEM_HEIGHT = 36; // Height of each legend item\nconst ITEM_GAP = 2; // Gap between items\nconst LEGEND_ITEM_LIMIT = 6;\nconst SHOW_MORE_BREAKPOINT = 450;\n\nexport const StackedLegend = ({\n  items,\n  onItemHover,\n  activeKey,\n  onLegendItemHover,\n  containerWidth,\n  separator = false,\n  showTitle = true,\n  layout = \"auto\",\n  className,\n  style,\n}: StackedLegendProps) => {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const listRef = useRef<HTMLDivElement>(null);\n  const [showUpButton, setShowUpButton] = useState(false);\n  const [showDownButton, setShowDownButton] = useState(false);\n  const [showAll, setShowAll] = useState(false);\n  const [isOverflowing, setIsOverflowing] = useState(false);\n\n  // Determine the actual layout to use\n  const isShowMoreLayout =\n    layout === \"showMore\" ||\n    (layout === \"auto\" &&\n      containerWidth !== undefined &&\n      (containerWidth < SHOW_MORE_BREAKPOINT || items.length > LEGEND_ITEM_LIMIT));\n\n  const isScrollableLayout = layout === \"scrollable\" || (layout === \"auto\" && !isShowMoreLayout);\n\n  const handleMouseEnter = (key: string, index: number) => {\n    onItemHover?.(key);\n    onLegendItemHover?.(index);\n  };\n\n  const handleMouseLeave = () => {\n    onItemHover?.(null);\n    onLegendItemHover?.(null);\n  };\n\n  // Check if scrolling is needed\n  useEffect(() => {\n    const checkScroll = () => {\n      if (listRef.current && containerRef.current) {\n        const { scrollTop, scrollHeight, clientHeight } = listRef.current;\n        const overflowing = scrollHeight > clientHeight;\n        setIsOverflowing(overflowing);\n        setShowUpButton(scrollTop > 0);\n        setShowDownButton(scrollTop < scrollHeight - clientHeight - 1);\n      }\n    };\n\n    if (isShowMoreLayout) {\n      setShowUpButton(false);\n      setShowDownButton(false);\n      return;\n    }\n\n    // Initial check\n    checkScroll();\n\n    // Add event listener for scroll\n    const currentRef = listRef.current;\n    if (currentRef) {\n      currentRef.addEventListener(\"scroll\", checkScroll);\n\n      // Also add resize observer to handle responsive changes\n      const resizeObserver = new ResizeObserver(checkScroll);\n      resizeObserver.observe(currentRef);\n\n      return () => {\n        currentRef.removeEventListener(\"scroll\", checkScroll);\n        resizeObserver.disconnect();\n      };\n    }\n    return () => {};\n  }, [isShowMoreLayout]);\n\n  // Scroll functions\n  const scrollUp = () => {\n    if (listRef.current) {\n      // Scroll one item up\n      listRef.current.scrollBy({ top: -(ITEM_HEIGHT + ITEM_GAP), behavior: \"smooth\" });\n    }\n  };\n\n  const scrollDown = () => {\n    if (listRef.current) {\n      // Scroll one item down\n      listRef.current.scrollBy({ top: ITEM_HEIGHT + ITEM_GAP, behavior: \"smooth\" });\n    }\n  };\n\n  // Calculate total for percentage\n  const total = items.reduce((sum, item) => sum + item.value, 0);\n\n  // Items are already sorted by the parent component, so we use them as-is\n  const itemsToDisplay = isShowMoreLayout && !showAll ? items.slice(0, 6) : items;\n  const shouldShowScrollControls =\n    isScrollableLayout && isOverflowing && items.length > LEGEND_ITEM_LIMIT;\n\n  return (\n    <div\n      ref={containerRef}\n      className={clsx(\"openui-stacked-legend-container\", className)}\n      style={{\n        width: containerWidth ? `${containerWidth}px` : \"100%\",\n        ...style,\n      }}\n    >\n      {shouldShowScrollControls && (\n        <div className=\"openui-stacked-legend-header\">\n          {showTitle && (\n            <div className=\"openui-stacked-legend-header-title\">{items.length} labels</div>\n          )}\n          <div className=\"openui-stacked-legend-header-buttons\">\n            {shouldShowScrollControls && (\n              <>\n                <IconButton\n                  className=\"openui-stacked-legend-scroll-button openui-stacked-legend-scroll-up\"\n                  onClick={scrollUp}\n                  aria-label=\"Scroll legend up\"\n                  icon={<ChevronUp />}\n                  variant=\"secondary\"\n                  size=\"extra-small\"\n                  disabled={!showUpButton}\n                />\n                <IconButton\n                  className=\"openui-stacked-legend-scroll-button openui-stacked-legend-scroll-down\"\n                  onClick={scrollDown}\n                  aria-label=\"Scroll legend down\"\n                  icon={<ChevronDown />}\n                  variant=\"secondary\"\n                  size=\"extra-small\"\n                  disabled={!showDownButton}\n                />\n              </>\n            )}\n          </div>\n        </div>\n      )}\n      <div ref={listRef} className=\"openui-stacked-legend\">\n        {itemsToDisplay.map((item, index) => (\n          <React.Fragment key={item.key}>\n            <div\n              className={`openui-stacked-legend__item ${\n                activeKey === item.key ? \"openui-stacked-legend__item--active\" : \"\"\n              }`}\n              onMouseEnter={() => handleMouseEnter(item.key, index)}\n              onMouseLeave={handleMouseLeave}\n            >\n              <div className=\"openui-stacked-legend__item-label\">\n                <div className=\"openui-stacked-legend__item-color-container\">\n                  <div\n                    className=\"openui-stacked-legend__item-color\"\n                    style={{ backgroundColor: item.color }}\n                  />\n                </div>\n                <div className=\"openui-stacked-legend__item-label-text\">{item.label}</div>\n              </div>\n              <div className=\"openui-stacked-legend__item-value\">\n                {formatPercentage(item.value, total)}\n              </div>\n            </div>\n            {index !== itemsToDisplay.length - 1 && separator && (\n              <Separator className=\"openui-stacked-legend-separator\" />\n            )}\n          </React.Fragment>\n        ))}\n      </div>\n      {isShowMoreLayout && !showAll && items.length > LEGEND_ITEM_LIMIT && (\n        <Button\n          variant=\"secondary\"\n          size=\"small\"\n          onClick={() => setShowAll(true)}\n          className=\"openui-stacked-legend-show-more-button\"\n        >\n          Show more\n        </Button>\n      )}\n      {isShowMoreLayout && showAll && items.length > LEGEND_ITEM_LIMIT && (\n        <Button\n          variant=\"secondary\"\n          size=\"small\"\n          onClick={() => setShowAll(false)}\n          className=\"openui-stacked-legend-show-less-button\"\n        >\n          Show less\n        </Button>\n      )}\n    </div>\n  );\n};\n","import clsx from \"clsx\";\nimport React from \"react\";\nimport { numberTickFormatter } from \"../../utils\";\n\nexport type SVGXAxisTickVariant = \"singleLine\" | \"angled\";\n\ninterface SVGXAxisTickProps {\n  x?: number;\n  y?: number;\n  payload?: {\n    value: any;\n  };\n  className?: string;\n  angle?: number;\n  textAnchor?: \"start\" | \"middle\" | \"end\";\n  tickFormatter?: (value: any) => string;\n  dy?: number;\n}\n\nconst SVGXAxisTick = React.forwardRef<SVGTextElement, SVGXAxisTickProps>((props, ref) => {\n  const {\n    x,\n    y,\n    payload,\n    className,\n    angle = 0,\n    textAnchor = \"middle\",\n    tickFormatter,\n    dy = 16,\n  } = props;\n\n  if (x === undefined || y === undefined) {\n    return null;\n  }\n\n  const raw = payload?.value;\n  // Auto-detect: Use custom formatter, or format numbers automatically, or stringify\n  const displayValue = tickFormatter\n    ? tickFormatter(raw)\n    : typeof raw === \"number\"\n      ? numberTickFormatter(raw)\n      : String(raw ?? \"\");\n\n  const transform = angle !== 0 ? `rotate(${angle}, ${x}, ${y})` : undefined;\n\n  return (\n    <text\n      ref={ref}\n      className={clsx(\n        \"openui-chart-svg-x-axis-tick\",\n        angle !== 0 && \"openui-chart-svg-x-axis-tick-angled\",\n        className,\n      )}\n      x={x}\n      y={y}\n      dy={dy}\n      textAnchor={textAnchor}\n      transform={transform}\n    >\n      {displayValue}\n    </text>\n  );\n});\n\nSVGXAxisTick.displayName = \"SVGXAxisTick\";\n\nexport { SVGXAxisTick };\nexport type { SVGXAxisTickProps };\n","import * as Tooltip from \"@radix-ui/react-tooltip\";\nimport React from \"react\";\n\ninterface LabelTooltipProviderProps {\n  children: React.ReactNode;\n  delayDuration?: number;\n  skipDelayDuration?: number;\n  disableHoverableContent?: boolean;\n}\n\ninterface LabelTooltipProps {\n  children: React.ReactNode;\n  content: string;\n  side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n  sideOffset?: number;\n  delayDuration?: number;\n  className?: string;\n  disabled?: boolean;\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n}\n\nconst DEFAULT_DELAY_DURATION = 300;\nconst DEFAULT_SKIP_DELAY_DURATION = 300;\nconst DEFAULT_DISABLE_HOVERABLE_CONTENT = false;\n\nconst LabelTooltipProvider: React.FC<LabelTooltipProviderProps> = (props) => {\n  const {\n    children,\n    delayDuration = DEFAULT_DELAY_DURATION,\n    skipDelayDuration = DEFAULT_SKIP_DELAY_DURATION,\n    disableHoverableContent = DEFAULT_DISABLE_HOVERABLE_CONTENT,\n  } = props;\n\n  return (\n    <Tooltip.Provider\n      delayDuration={delayDuration}\n      skipDelayDuration={skipDelayDuration}\n      disableHoverableContent={disableHoverableContent}\n    >\n      {children}\n    </Tooltip.Provider>\n  );\n};\n\nconst LabelTooltip = React.forwardRef<HTMLDivElement, LabelTooltipProps>((props, ref) => {\n  const {\n    children,\n    content,\n    side = \"top\",\n    sideOffset = 1,\n    delayDuration = DEFAULT_DELAY_DURATION,\n    className = \"openui-chart-label-tooltip\",\n    disabled = false,\n    open,\n    defaultOpen,\n    onOpenChange,\n  } = props;\n\n  if (disabled) {\n    return children;\n  }\n\n  return (\n    <Tooltip.Root\n      delayDuration={delayDuration}\n      open={open}\n      defaultOpen={defaultOpen}\n      onOpenChange={onOpenChange}\n    >\n      <Tooltip.Trigger asChild>{children}</Tooltip.Trigger>\n      <Tooltip.Portal>\n        <Tooltip.Content ref={ref} className={className} side={side} sideOffset={sideOffset}>\n          {content}\n        </Tooltip.Content>\n      </Tooltip.Portal>\n    </Tooltip.Root>\n  );\n});\n\nLabelTooltip.displayName = \"LabelTooltip\";\n\nexport { LabelTooltip, LabelTooltipProvider };\nexport type { LabelTooltipProps, LabelTooltipProviderProps };\n","import clsx from \"clsx\";\nimport React, { useLayoutEffect, useRef, useState } from \"react\";\nimport { XAxisTickVariant } from \"../../types\";\nimport { LabelTooltip } from \"../LabelTooltip/LabelTooltip\";\n\ninterface XAxisTickProps {\n  x?: number;\n  y?: number;\n  payload?: {\n    value: any;\n    coordinate?: number;\n    tickCoord?: number;\n    index?: number;\n    offset?: number;\n    isShow?: boolean;\n  };\n  textAnchor?: \"start\" | \"middle\" | \"end\";\n  verticalAnchor?: \"start\" | \"middle\" | \"end\";\n  fill?: string;\n  stroke?: string;\n  width?: number;\n  height?: number;\n  className?: string;\n  orientation?: \"top\" | \"bottom\";\n  tickFormatter?: (value: any) => string;\n  index?: number;\n  visibleTicksCount?: number;\n  variant?: XAxisTickVariant;\n  widthOfGroup?: number;\n  labelHeight?: number;\n  onMouseEnter?: (tickProps: XAxisTickProps) => void;\n  onMouseLeave?: (tickProps: XAxisTickProps) => void;\n}\n\nconst XAxisTick = React.forwardRef<SVGGElement, XAxisTickProps>((props, ref) => {\n  const {\n    x,\n    y,\n    payload,\n    className,\n    variant = \"multiLine\",\n    widthOfGroup = 70,\n    labelHeight = 20,\n    onMouseEnter,\n    onMouseLeave,\n  } = props;\n\n  const rawValue = payload?.value;\n  const value = String(rawValue || \"\");\n\n  const foreignObjectRef = useRef<SVGForeignObjectElement>(null);\n  const spanRef = useRef<HTMLSpanElement>(null);\n  const [isTruncated, setIsTruncated] = useState(false);\n\n  // Check if text is truncated\n  useLayoutEffect(() => {\n    if (spanRef.current) {\n      const element = spanRef.current;\n      const isCurrentlyTruncated =\n        variant === \"multiLine\"\n          ? element.scrollHeight > element.clientHeight\n          : element.scrollWidth > element.clientWidth;\n      setIsTruncated(isCurrentlyTruncated);\n    }\n  }, [value, variant, widthOfGroup]);\n\n  if (x === undefined || y === undefined) {\n    return null;\n  }\n\n  // The x position from Recharts is the center of the group\n  // To center the foreignObject, we need to offset by half of widthOfGroup\n  // +2 is for the multiLine variant to center the text\n  // +5 is for the singleLine variant to center the text\n  // offset for padding - 4 and -10 respectively\n  const calX = variant === \"multiLine\" ? x - widthOfGroup / 2 + 2 : x - widthOfGroup / 2 + 5;\n  const calWidth = variant === \"multiLine\" ? widthOfGroup - 4 : widthOfGroup - 10;\n\n  const spanClassName =\n    variant === \"multiLine\"\n      ? \"openui-chart-x-axis-tick-multi-line\"\n      : \"openui-chart-x-axis-tick-single-line\";\n\n  return (\n    <g ref={ref} transform={`translate(${calX},${y})`}>\n      <foreignObject\n        ref={foreignObjectRef}\n        transform=\"translate(0, 0)\"\n        width={calWidth}\n        height={labelHeight} // Initial height, will be updated by useLayoutEffect\n        className=\"openui-chart-x-axis-tick-foreign\"\n      >\n        <div\n          style={{\n            width: \"100%\",\n            height: \"100%\",\n            boxSizing: \"border-box\",\n          }}\n          onMouseEnter={() => onMouseEnter?.(props)}\n          onMouseLeave={() => onMouseLeave?.(props)}\n        >\n          <LabelTooltip content={value} side=\"top\" disabled={!isTruncated}>\n            <span\n              ref={spanRef}\n              style={{\n                textAlign: \"center\",\n                wordBreak: \"break-word\",\n              }}\n              className={clsx(spanClassName, className)}\n            >\n              {value}\n            </span>\n          </LabelTooltip>\n        </div>\n      </foreignObject>\n    </g>\n  );\n});\n\nXAxisTick.displayName = \"XAxisTick\";\n\nexport { XAxisTick };\nexport type { XAxisTickProps };\n","import { useLayoutEffect } from \"react\";\nimport { numberTickFormatter } from \"../../utils\";\n\ninterface YAxisTickProps {\n  x?: number;\n  y?: number;\n  payload?: {\n    value: any;\n    coordinate?: number;\n    tickCoord?: number;\n    index?: number;\n    offset?: number;\n    isShow?: boolean;\n  };\n  textAnchor?: \"start\" | \"middle\" | \"end\";\n  verticalAnchor?: \"start\" | \"middle\" | \"end\";\n  fill?: string;\n  stroke?: string;\n  width?: number;\n  height?: number;\n  className?: string;\n  orientation?: \"left\" | \"right\";\n  tickFormatter?: (value: any) => string;\n  index?: number;\n  visibleTicksCount?: number;\n  setLabelWidth: (label: string) => void;\n}\n\nconst YAxisTick: React.FC<YAxisTickProps> = (props) => {\n  const { x, y, payload, textAnchor, verticalAnchor, className, setLabelWidth } = props;\n\n  const displayValue =\n    typeof payload?.value === \"number\"\n      ? numberTickFormatter(payload?.value)\n      : String(payload?.value);\n\n  useLayoutEffect(() => {\n    setLabelWidth(displayValue);\n  }, [displayValue, setLabelWidth]);\n\n  return (\n    <g transform={`translate(${x},${y})`} className={className}>\n      <text\n        x={0}\n        y={0}\n        dy={verticalAnchor === \"middle\" ? 4 : 0} // Adjust based on vertical anchor\n        textAnchor={textAnchor || \"end\"}\n        className=\"openui-chart-y-axis-tick\"\n      >\n        {displayValue}\n      </text>\n    </g>\n  );\n};\n\nexport { YAxisTick };\nexport type { YAxisTickProps };\n","// Common utility functions for Area and Line charts\n// These functions are chart-type agnostic and can be shared between AreaChartV2 and LineChartV2\n\nimport { AreaChartData } from \"../../AreaChart/types\";\nimport { LineChartData } from \"../../LineChart/types\";\n\nconst ELEMENT_SPACING = 72;\n\n// Common type for chart data - both AreaChart and LineChart data structures\ntype ChartData = AreaChartData | LineChartData;\n\n/**\n * AREA CHART AND LINE CHART SPECIFIC FUNCTION\n * This function returns the width of the data in the area chart, used for padding calculation, scroll amount calculation, and\n * for the width of the chart container.\n * @param data - The data to be displayed in the chart.\n */\nexport const getWidthOfData = (data: ChartData, containerWidth: number) => {\n  if (data.length === 0) {\n    return containerWidth;\n  }\n  // For area charts, we calculate based on the number of data points.\n  // We use getWidthOfGroup to ensure consistency\n  const width = data.length * getWidthOfGroup(data);\n\n  // if the container width is greater than the width of the data, then we return the container width\n  // because the we need the chart minimum width to be the container width\n  // this decision is made because area chart an bar chart are span from the left to the right of the container\n  if (containerWidth >= width) {\n    return containerWidth;\n  }\n\n  if (data.length === 1) {\n    const minSingleDataWidth = 200; // Minimum width for single data points\n    // if the data point is only one, then we need to set the width to the minimum width\n    return Math.max(width, minSingleDataWidth);\n  }\n\n  return width;\n};\n\n/**\n * SHARED UTILITY FUNCTION\n * This function returns the nearest snap position index for both chart types.\n * The implementation is identical for both AreaChart and LineChart.\n * @param snapPositions - The snap positions for the chart.\n * @param currentScroll - The current scroll of the chart.\n * @param direction - The direction of the scroll.\n * @returns The nearest snap position index for the chart.\n */\nexport const findNearestSnapPosition = (\n  snapPositions: number[],\n  currentScroll: number,\n  direction: \"left\" | \"right\",\n): number => {\n  // Find current position index\n  let currentIndex = 0;\n  for (let i = 0; i < snapPositions.length; i++) {\n    const snapPosition = snapPositions[i];\n    if (snapPosition !== undefined && currentScroll >= snapPosition) {\n      currentIndex = i;\n    } else {\n      break;\n    }\n  }\n\n  if (direction === \"left\") {\n    // Go to previous snap position\n    return Math.max(0, currentIndex - 1);\n  } else {\n    // Go to next snap position\n    return Math.min(snapPositions.length - 1, currentIndex + 1);\n  }\n};\n\n/**\n * SHARED UTILITY FUNCTION\n * This function returns the width of each group/category for both chart types.\n * Both AreaChart and LineChart use the same ELEMENT_SPACING.\n * @param data - The data to be displayed in the chart.\n * @returns The width of each group/category.\n */\nexport const getWidthOfGroup = (data: ChartData) => {\n  if (data.length === 0) return 200; // Fallback\n\n  // Both chart types use the same spacing\n  return ELEMENT_SPACING;\n};\n\n/**\n * SHARED UTILITY FUNCTION\n * This function returns the snap positions for both chart types, used for smooth scrolling.\n * @param data - The data to be displayed in the chart.\n * @returns The snap positions for the chart.\n */\nexport const getSnapPositions = (data: ChartData): number[] => {\n  if (data.length === 0) return [0];\n\n  const positions = [0]; // Start position\n  const groupWidthValue = getWidthOfGroup(data);\n\n  // Calculate all valid snap positions based on data points\n  for (let i = 1; i < data.length; i++) {\n    positions.push(i * groupWidthValue);\n  }\n\n  return positions;\n};\n","import { AreaChartVariant, LineChartVariant } from \"../..\";\n\nexport const getLineType = (lineType: LineChartVariant | AreaChartVariant) => {\n  switch (lineType) {\n    case \"linear\":\n      return \"linear\";\n    case \"natural\":\n      return \"monotone\";\n    case \"step\":\n      return \"step\";\n  }\n};\n","import clsx from \"clsx\";\nimport React, { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { Area, AreaChart as RechartsAreaChart, XAxis, YAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { ChartConfig, ChartContainer, ChartTooltip } from \"../Charts\";\nimport { SideBarChartData, SideBarTooltipProvider } from \"../context/SideBarTooltipContext\";\nimport {\n  useExportChartData,\n  useMaxLabelHeight,\n  useTransformedKeys,\n  useYAxisLabelWidth,\n} from \"../hooks\";\nimport {\n  ActiveDot,\n  cartesianGrid,\n  CustomTooltipContent,\n  DefaultLegend,\n  ScrollButtonsHorizontal,\n  SideBarTooltip,\n  XAxisTick,\n  YAxisTick,\n} from \"../shared\";\nimport { LabelTooltipProvider } from \"../shared/LabelTooltip/LabelTooltip\";\nimport { LegendItem, XAxisTickVariant } from \"../types\";\nimport {\n  findNearestSnapPosition,\n  getSnapPositions,\n  getWidthOfData,\n  getWidthOfGroup,\n} from \"../utils/AreaAndLine/AreaAndLineUtils\";\nimport { getLineType } from \"../utils/AreaAndLine/common\";\nimport { PaletteName, useChartPalette } from \"../utils/PalletUtils\";\nimport {\n  get2dChartConfig,\n  getColorForDataKey,\n  getDataKeys,\n  getLegendItems,\n} from \"../utils/dataUtils\";\nimport { AreaChartData, AreaChartVariant } from \"./types\";\n\n// this a technic to get the type of the onClick event of the bar chart\n// we need to do this because the onClick event type is not exported by recharts\ntype AreaChartOnClick = React.ComponentProps<typeof RechartsAreaChart>[\"onClick\"];\ntype AreaClickData = Parameters<NonNullable<AreaChartOnClick>>[0];\n\nexport interface AreaChartProps<T extends AreaChartData> {\n  data: T;\n  categoryKey: keyof T[number];\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: AreaChartVariant;\n  tickVariant?: XAxisTickVariant;\n  grid?: boolean;\n  legend?: boolean;\n  icons?: Partial<Record<keyof T[number], React.ComponentType>>;\n  isAnimationActive?: boolean;\n  showYAxis?: boolean;\n  xAxisLabel?: React.ReactNode;\n  yAxisLabel?: React.ReactNode;\n  className?: string;\n  height?: number;\n  width?: number;\n}\n\nconst X_AXIS_PADDING = 36;\nconst CHART_CONTAINER_BOTTOM_MARGIN = 10;\n\nconst AreaChartComponent = <T extends AreaChartData>({\n  data,\n  categoryKey,\n  theme = \"ocean\",\n  customPalette,\n  variant: areaChartVariant = \"natural\",\n  tickVariant = \"multiLine\",\n  grid = true,\n  icons = {},\n  isAnimationActive = false,\n  showYAxis = true,\n  xAxisLabel,\n  yAxisLabel,\n  legend = true,\n  className,\n  height,\n  width,\n}: AreaChartProps<T>) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const dataKeys = useMemo(() => {\n    return getDataKeys(data, categoryKey as string);\n  }, [data, categoryKey]);\n\n  const variant = getLineType(areaChartVariant);\n\n  const { yAxisWidth, setLabelWidth } = useYAxisLabelWidth(data, dataKeys);\n\n  const widthOfGroup = useMemo(() => {\n    return getWidthOfGroup(data);\n  }, [data]);\n\n  const maxLabelHeight = useMaxLabelHeight(data, categoryKey as string, tickVariant, widthOfGroup);\n\n  const transformedKeys = useTransformedKeys(dataKeys);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"areaChartPalette\",\n    dataLength: dataKeys.length,\n  });\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig(dataKeys, colors, transformedKeys, undefined, icons);\n  }, [dataKeys, icons, colors, transformedKeys]);\n\n  const chartContainerRef = useRef<HTMLDivElement>(null);\n  const mainContainerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n  const [canScrollLeft, setCanScrollLeft] = useState(false);\n  const [canScrollRight, setCanScrollRight] = useState(false);\n  const [isSideBarTooltipOpen, setIsSideBarTooltipOpen] = useState(false);\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n  const [sideBarTooltipData, setSideBarTooltipData] = useState<SideBarChartData>({\n    title: \"\",\n    values: [],\n  });\n\n  // Use provided width or observed width\n  const effectiveWidth = useMemo(() => {\n    return width ?? containerWidth;\n  }, [width, containerWidth]);\n\n  const effectiveContainerWidth = useMemo(() => {\n    const dynamicYAxisWidth = showYAxis ? yAxisWidth : 0;\n    return Math.max(0, effectiveWidth - dynamicYAxisWidth - 40); // -40 because we are giving 20px padding in xAxis on each side\n  }, [effectiveWidth, showYAxis, yAxisWidth]);\n\n  const dataWidth = useMemo(() => {\n    return getWidthOfData(data, effectiveContainerWidth);\n  }, [data, effectiveContainerWidth]);\n\n  // Calculate snap positions for proper scrolling alignment\n  const snapPositions = useMemo(() => {\n    return getSnapPositions(data);\n  }, [data]);\n\n  const chartHeight = useMemo(() => {\n    return height ?? 296 + maxLabelHeight;\n  }, [height, maxLabelHeight]);\n\n  // Check scroll boundaries\n  const updateScrollState = useCallback(() => {\n    if (mainContainerRef.current) {\n      const { scrollLeft, scrollWidth, clientWidth } = mainContainerRef.current;\n      setCanScrollLeft(scrollLeft > 0);\n      setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 1); // -1 for floating point precision\n    }\n  }, []);\n\n  const scrollLeft = useCallback(() => {\n    if (mainContainerRef.current) {\n      const currentScroll = mainContainerRef.current.scrollLeft;\n      const targetIndex = findNearestSnapPosition(snapPositions, currentScroll, \"left\");\n      const targetPosition = snapPositions[targetIndex] ?? 0;\n\n      mainContainerRef.current.scrollTo({\n        left: targetPosition,\n        behavior: \"smooth\",\n      });\n    }\n  }, [snapPositions]);\n\n  const scrollRight = useCallback(() => {\n    if (mainContainerRef.current) {\n      const currentScroll = mainContainerRef.current.scrollLeft;\n      const targetIndex = findNearestSnapPosition(snapPositions, currentScroll, \"right\");\n      const targetPosition = snapPositions[targetIndex] ?? 0;\n\n      mainContainerRef.current.scrollTo({\n        left: targetPosition,\n        behavior: \"smooth\",\n      });\n    }\n  }, [snapPositions]);\n\n  useEffect(() => {\n    // Only set up ResizeObserver if width is not provided\n    if (width || !chartContainerRef.current) {\n      return () => {};\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      // there is only one entry in the entries array because we are observing the chart container\n      for (const entry of entries) {\n        setContainerWidth(entry.contentRect.width);\n      }\n    });\n\n    resizeObserver.observe(chartContainerRef.current);\n    setContainerWidth(chartContainerRef.current.getBoundingClientRect().width);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [width]);\n\n  // Update scroll state when container width or data width changes\n  useEffect(() => {\n    updateScrollState();\n  }, [effectiveWidth, dataWidth, updateScrollState]);\n\n  useEffect(() => {\n    setIsSideBarTooltipOpen(false);\n    setIsLegendExpanded(false);\n  }, [dataKeys]);\n\n  // Add scroll event listener to update button states\n  useEffect(() => {\n    const mainContainer = mainContainerRef.current;\n    if (!mainContainer) return;\n\n    const handleScroll = () => {\n      updateScrollState();\n    };\n\n    mainContainer.addEventListener(\"scroll\", handleScroll);\n    return () => {\n      mainContainer.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, [updateScrollState]);\n\n  const legendItems: LegendItem[] = useMemo(() => {\n    return getLegendItems(dataKeys, colors, icons);\n  }, [dataKeys, colors, icons]);\n\n  const exportData = useExportChartData({\n    type: \"area\",\n    data,\n    categoryKey: categoryKey as string,\n    dataKeys,\n    colors,\n    legend,\n    xAxisLabel,\n    yAxisLabel,\n  });\n\n  const id = useId();\n\n  const gradientID = useMemo(() => `area-chart-gradient-${id}`, [id]);\n\n  const onAreaClick = useCallback(\n    (data: AreaClickData) => {\n      if (data?.activePayload?.length && data.activePayload.length > 10) {\n        setIsSideBarTooltipOpen(true);\n        setSideBarTooltipData({\n          title: data.activeLabel as string,\n          values: data.activePayload.map((payload) => ({\n            value: payload.value as number,\n            label: payload.name || payload.dataKey,\n            color: getColorForDataKey(payload.dataKey, dataKeys, colors),\n          })),\n        });\n      }\n    },\n    [dataKeys, colors],\n  );\n\n  const yAxis = useMemo(() => {\n    if (!showYAxis) {\n      return null;\n    }\n    return (\n      <div className=\"openui-area-chart-y-axis-container\">\n        {/* Y-axis only chart - synchronized with main chart */}\n        <RechartsAreaChart\n          key={`y-axis-chart-${id}`}\n          width={yAxisWidth}\n          height={chartHeight}\n          data={data}\n          margin={{\n            top: 20,\n            bottom: maxLabelHeight + CHART_CONTAINER_BOTTOM_MARGIN, // this is required for to give space for x-axis\n            left: 0,\n            right: 0,\n          }}\n        >\n          <YAxis\n            width={yAxisWidth}\n            tickLine={false}\n            axisLine={false}\n            tick={<YAxisTick setLabelWidth={setLabelWidth} />}\n          />\n          {/* Invisible area to maintain scale synchronization */}\n          {dataKeys.map((key) => {\n            return (\n              <Area\n                key={`y-axis-${key}`}\n                dataKey={key}\n                type={variant}\n                stroke=\"none\"\n                fill=\"transparent\"\n                fillOpacity={0}\n                stackId=\"a\"\n              />\n            );\n          })}\n        </RechartsAreaChart>\n      </div>\n    );\n  }, [showYAxis, chartHeight, data, dataKeys, variant, id, maxLabelHeight, yAxisWidth]);\n\n  return (\n    <LabelTooltipProvider>\n      <SideBarTooltipProvider\n        isSideBarTooltipOpen={isSideBarTooltipOpen}\n        setIsSideBarTooltipOpen={setIsSideBarTooltipOpen}\n        data={sideBarTooltipData}\n        setData={setSideBarTooltipData}\n      >\n        <div\n          className={clsx(\"openui-area-chart-container\", className)}\n          data-openui-chart={exportData}\n          style={{\n            width: width ? `${width}px` : undefined,\n          }}\n        >\n          <div className=\"openui-area-chart-container-inner\" ref={chartContainerRef}>\n            {/* Y-axis of the chart */}\n            {yAxis}\n            <div className=\"openui-area-chart-main-container\" ref={mainContainerRef}>\n              <ChartContainer\n                config={chartConfig}\n                style={{ width: dataWidth, minWidth: \"100%\", height: chartHeight }}\n                rechartsProps={{\n                  width: \"100%\",\n                  height: \"100%\",\n                  minHeight: 1,\n                  minWidth: 1,\n                  initialDimension: { width: 1, height: 1 },\n                }}\n              >\n                <RechartsAreaChart\n                  accessibilityLayer\n                  key={`area-chart-${id}`}\n                  data={data}\n                  margin={{\n                    top: 20,\n                    bottom: CHART_CONTAINER_BOTTOM_MARGIN,\n                  }}\n                  onClick={onAreaClick}\n                >\n                  {grid && cartesianGrid()}\n                  <XAxis\n                    dataKey={categoryKey as string}\n                    tickLine={false}\n                    axisLine={false}\n                    textAnchor=\"middle\"\n                    interval={0}\n                    height={maxLabelHeight}\n                    tick={\n                      <XAxisTick\n                        variant={tickVariant}\n                        widthOfGroup={widthOfGroup}\n                        labelHeight={maxLabelHeight}\n                      />\n                    }\n                    orientation=\"bottom\"\n                    padding={{\n                      left: X_AXIS_PADDING,\n                      right: X_AXIS_PADDING,\n                    }}\n                  />\n\n                  <ChartTooltip\n                    content={<CustomTooltipContent parentRef={mainContainerRef} />}\n                    offset={15}\n                  />\n\n                  {dataKeys.map((key) => {\n                    const transformedKey = transformedKeys[key];\n                    const color = `var(--color-${transformedKey})`;\n                    return (\n                      <defs key={`gradient-${transformedKey}`}>\n                        <linearGradient\n                          id={`${gradientID}-${transformedKey}`}\n                          x1=\"0\"\n                          y1=\"0\"\n                          x2=\"0\"\n                          y2=\"1\"\n                        >\n                          <stop offset=\"5%\" stopColor={color} stopOpacity={0.6} />\n                          <stop offset=\"95%\" stopColor={color} stopOpacity={0} />\n                        </linearGradient>\n                      </defs>\n                    );\n                  })}\n\n                  {dataKeys.map((key) => {\n                    const transformedKey = transformedKeys[key];\n                    const color = `var(--color-${transformedKey})`;\n                    return (\n                      <Area\n                        key={`main-${key}`}\n                        dataKey={key}\n                        type={variant}\n                        stroke={color}\n                        fill={`url(#${gradientID}-${transformedKey})`}\n                        fillOpacity={1}\n                        stackId=\"a\"\n                        activeDot={<ActiveDot key={`active-dot-${key}-${id}`} />}\n                        dot={false}\n                        isAnimationActive={isAnimationActive}\n                      />\n                    );\n                  })}\n                </RechartsAreaChart>\n              </ChartContainer>\n            </div>\n            {isSideBarTooltipOpen && <SideBarTooltip height={chartHeight} />}\n          </div>\n          {/* if the data width is greater than the effective width, then show the scroll buttons */}\n          <ScrollButtonsHorizontal\n            dataWidth={dataWidth}\n            effectiveWidth={effectiveWidth}\n            canScrollLeft={canScrollLeft}\n            canScrollRight={canScrollRight}\n            isSideBarTooltipOpen={isSideBarTooltipOpen}\n            onScrollLeft={scrollLeft}\n            onScrollRight={scrollRight}\n          />\n          {legend && (\n            <DefaultLegend\n              items={legendItems}\n              yAxisLabel={yAxisLabel}\n              xAxisLabel={xAxisLabel}\n              containerWidth={effectiveWidth}\n              isExpanded={isLegendExpanded}\n              setIsExpanded={setIsLegendExpanded}\n            />\n          )}\n        </div>\n      </SideBarTooltipProvider>\n    </LabelTooltipProvider>\n  );\n};\n\n// Added React.memo for performance optimization to avoid unnecessary re-renders\nexport const AreaChart = React.memo(AreaChartComponent) as typeof AreaChartComponent;\n","import clsx from \"clsx\";\nimport React, { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { Area, AreaChart as RechartsAreaChart, XAxis, YAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { AreaChartData, AreaChartVariant } from \"../AreaChart/types\";\nimport { ChartConfig, ChartContainer, ChartTooltip } from \"../Charts\";\nimport { DEFAULT_X_AXIS_HEIGHT, X_AXIS_PADDING } from \"../constants\";\nimport { SideBarChartData, SideBarTooltipProvider } from \"../context/SideBarTooltipContext\";\nimport {\n  useAutoAngleCalculation,\n  useExportChartData,\n  useMaxLabelWidth,\n  useTransformedKeys,\n  useYAxisLabelWidth,\n} from \"../hooks\";\nimport {\n  ActiveDot,\n  cartesianGrid,\n  CustomTooltipContent,\n  DefaultLegend,\n  SideBarTooltip,\n  SVGXAxisTick,\n  SVGXAxisTickVariant,\n  YAxisTick,\n} from \"../shared\";\nimport { LabelTooltipProvider } from \"../shared/LabelTooltip/LabelTooltip\";\nimport { LegendItem } from \"../types\";\nimport { getLineType } from \"../utils/AreaAndLine/common\";\nimport {\n  get2dChartConfig,\n  getColorForDataKey,\n  getDataKeys,\n  getLegendItems,\n} from \"../utils/dataUtils\";\nimport { PaletteName, useChartPalette } from \"../utils/PalletUtils\";\n\n// this a technic to get the type of the onClick event of the area chart\n// we need to do this because the onClick event type is not exported by recharts\ntype AreaChartOnClick = React.ComponentProps<typeof RechartsAreaChart>[\"onClick\"];\ntype AreaClickData = Parameters<NonNullable<AreaChartOnClick>>[0];\n\nexport interface AreaChartCondensedProps<T extends AreaChartData> {\n  data: T;\n  categoryKey: keyof T[number];\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: AreaChartVariant;\n  tickVariant?: SVGXAxisTickVariant;\n  grid?: boolean;\n  icons?: Partial<Record<keyof T[number], React.ComponentType>>;\n  isAnimationActive?: boolean;\n  showYAxis?: boolean;\n  xAxisLabel?: React.ReactNode;\n  yAxisLabel?: React.ReactNode;\n  legend?: boolean;\n  className?: string;\n  height?: number;\n  width?: number;\n}\n\nconst CHART_HEIGHT = 296;\nconst CHART_CONTAINER_BOTTOM_MARGIN = 10;\n\nconst AreaChartCondensedComponent = <T extends AreaChartData>({\n  data,\n  categoryKey,\n  theme = \"ocean\",\n  customPalette,\n  variant: areaChartVariant = \"natural\",\n  tickVariant = \"singleLine\",\n  grid = true,\n  icons = {},\n  isAnimationActive = false,\n  showYAxis = true,\n  xAxisLabel,\n  yAxisLabel,\n  legend = true,\n  className,\n  height = CHART_HEIGHT,\n  width,\n}: AreaChartCondensedProps<T>) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const dataKeys = useMemo(() => {\n    return getDataKeys(data, categoryKey as string);\n  }, [data, categoryKey]);\n\n  const variant = getLineType(areaChartVariant);\n\n  const { yAxisWidth, setLabelWidth } = useYAxisLabelWidth(data, dataKeys);\n\n  const maxLabelWidth = useMaxLabelWidth(data, categoryKey as string);\n\n  const chartContainerRef = useRef<HTMLDivElement>(null);\n  const [chartContainerWidth, setChartContainerWidth] = useState<number>(0);\n\n  const widthOfData = useMemo(() => {\n    if (data.length === 0) {\n      return 0;\n    }\n    // Use passed width if available, otherwise use observed chartContainerWidth\n    const chartWidth = width ?? chartContainerWidth;\n    return chartWidth / data.length;\n  }, [width, chartContainerWidth, data]);\n\n  const { angle: calculatedAngle, height: xAxisHeight } = useAutoAngleCalculation(\n    maxLabelWidth,\n    tickVariant === \"angled\",\n    // if the max label width is less than 100px, then we use the width of the data to calculate the angle, gives better results for small datasets\n    maxLabelWidth < 100 ? widthOfData : undefined,\n  );\n\n  const isAngled = useMemo(() => {\n    return calculatedAngle !== 0;\n  }, [calculatedAngle]);\n\n  const effectiveHeight = useMemo(() => {\n    if (tickVariant === \"angled\") {\n      return xAxisHeight + height;\n    }\n    return height + DEFAULT_X_AXIS_HEIGHT;\n  }, [height, xAxisHeight, tickVariant]);\n\n  const transformedKeys = useTransformedKeys(dataKeys);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"areaChartPalette\",\n    dataLength: dataKeys.length,\n  });\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig(dataKeys, colors, transformedKeys, undefined, icons);\n  }, [dataKeys, icons, colors, transformedKeys]);\n\n  const id = useId();\n\n  const exportData = useExportChartData({\n    type: \"area\",\n    data,\n    categoryKey: categoryKey as string,\n    dataKeys,\n    colors,\n    legend,\n    xAxisLabel,\n    yAxisLabel,\n  });\n  const gradientID = useMemo(() => `area-chart-condensed-gradient-${id}`, [id]);\n\n  const chartMargin = useMemo(\n    () => ({\n      top: 10,\n      right: 10,\n      bottom: CHART_CONTAINER_BOTTOM_MARGIN,\n      left: showYAxis ? 10 : 0,\n    }),\n    [showYAxis],\n  );\n\n  const onAreaClick = useCallback(\n    (data: AreaClickData) => {\n      if (data?.activePayload?.length && data.activePayload.length > 10) {\n        setIsSideBarTooltipOpen(true);\n        setSideBarTooltipData({\n          title: data.activeLabel as string,\n          values: data.activePayload.map((payload) => ({\n            value: payload.value as number,\n            label: payload.name || payload.dataKey,\n            color: getColorForDataKey(payload.dataKey, dataKeys, colors),\n          })),\n        });\n      }\n    },\n    [dataKeys, colors],\n  );\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n  const [isSideBarTooltipOpen, setIsSideBarTooltipOpen] = useState(false);\n  const [sideBarTooltipData, setSideBarTooltipData] = useState<SideBarChartData>({\n    title: \"\",\n    values: [],\n  });\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n\n  // Use provided width or observed width\n  const effectiveWidth = useMemo(() => {\n    return width ?? containerWidth;\n  }, [width, containerWidth]);\n\n  // Observe container width for legend\n  useEffect(() => {\n    // Only set up ResizeObserver if width is not provided\n    if (width || !containerRef.current || !chartContainerRef.current) {\n      return () => {};\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      // there is only one entry in the entries array because we are observing the chart container\n      for (const entry of entries) {\n        if (entry.target === containerRef.current) {\n          setContainerWidth(entry.contentRect.width);\n        }\n        if (entry.target === chartContainerRef.current) {\n          setChartContainerWidth(entry.contentRect.width);\n        }\n      }\n    });\n\n    resizeObserver.observe(containerRef.current);\n    resizeObserver.observe(chartContainerRef.current);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [width]);\n\n  useEffect(() => {\n    setIsLegendExpanded(false);\n  }, [dataKeys]);\n\n  // Memoize legend items creation\n  const legendItems: LegendItem[] = useMemo(() => {\n    if (!legend) {\n      return [];\n    }\n    return getLegendItems(dataKeys, colors, icons);\n  }, [dataKeys, colors, icons, legend]);\n\n  const yAxis = useMemo(() => {\n    if (!showYAxis) {\n      return null;\n    }\n    return (\n      <div className=\"openui-area-chart-condensed-y-axis-container\">\n        {/* Y-axis only chart - synchronized with main chart */}\n        <RechartsAreaChart\n          key={`y-axis-area-chart-condensed-${id}`}\n          width={yAxisWidth}\n          height={effectiveHeight}\n          data={data}\n          margin={{\n            top: chartMargin.top,\n            bottom: xAxisHeight + chartMargin.bottom, // this is required to give space for x-axis\n            left: 0,\n            right: 0,\n          }}\n        >\n          <YAxis\n            width={yAxisWidth}\n            tickLine={false}\n            axisLine={false}\n            tick={<YAxisTick setLabelWidth={setLabelWidth} />}\n          />\n          {/* Invisible areas to maintain scale synchronization */}\n          {dataKeys.map((key) => {\n            return (\n              <Area\n                key={`yaxis-area-chart-condensed-${key}`}\n                dataKey={key}\n                fill=\"transparent\"\n                stroke=\"transparent\"\n                stackId=\"a\"\n                isAnimationActive={false}\n              />\n            );\n          })}\n        </RechartsAreaChart>\n      </div>\n    );\n  }, [\n    showYAxis,\n    effectiveHeight,\n    data,\n    dataKeys,\n    id,\n    yAxisWidth,\n    chartMargin,\n    xAxisHeight,\n    setLabelWidth,\n  ]);\n\n  return (\n    <LabelTooltipProvider>\n      <SideBarTooltipProvider\n        isSideBarTooltipOpen={isSideBarTooltipOpen}\n        setIsSideBarTooltipOpen={setIsSideBarTooltipOpen}\n        data={sideBarTooltipData}\n        setData={setSideBarTooltipData}\n      >\n        <div\n          className={clsx(\"openui-area-chart-condensed-container\", className)}\n          data-openui-chart={exportData}\n          style={{\n            width: width ? `${width}px` : undefined,\n          }}\n        >\n          {yAxisLabel && (\n            <div className=\"openui-area-chart-condensed-y-axis-label\">{yAxisLabel}</div>\n          )}\n          <div className=\"openui-area-chart-condensed-container-inner\" ref={containerRef}>\n            {/* Y-axis of the chart */}\n            {yAxis}\n            <div className=\"openui-area-chart-condensed\" ref={chartContainerRef}>\n              <ChartContainer\n                config={chartConfig}\n                style={{ width: \"100%\", height: effectiveHeight }}\n                rechartsProps={{\n                  width: \"100%\",\n                  height: \"100%\",\n                }}\n              >\n                <RechartsAreaChart\n                  accessibilityLayer\n                  key={`area-chart-condensed-${id}`}\n                  data={data}\n                  margin={chartMargin}\n                  onClick={onAreaClick}\n                >\n                  {grid && cartesianGrid()}\n\n                  <XAxis\n                    dataKey={categoryKey as string}\n                    tickLine={false}\n                    axisLine={false}\n                    textAnchor={isAngled ? \"end\" : \"middle\"}\n                    interval=\"preserveStartEnd\"\n                    minTickGap={5}\n                    height={xAxisHeight}\n                    tick={<SVGXAxisTick />}\n                    angle={calculatedAngle}\n                    orientation=\"bottom\"\n                    padding={{\n                      left: X_AXIS_PADDING,\n                      right: X_AXIS_PADDING,\n                    }}\n                  />\n                  {/* Y-axis is rendered in the separate synchronized chart */}\n\n                  <ChartTooltip\n                    content={<CustomTooltipContent parentRef={containerRef} />}\n                    offset={10}\n                  />\n\n                  {dataKeys.map((key) => {\n                    const transformedKey = transformedKeys[key];\n                    const color = `var(--color-${transformedKey})`;\n                    return (\n                      <defs key={`gradient-${transformedKey}`}>\n                        <linearGradient\n                          id={`${gradientID}-${transformedKey}`}\n                          x1=\"0\"\n                          y1=\"0\"\n                          x2=\"0\"\n                          y2=\"1\"\n                        >\n                          <stop offset=\"5%\" stopColor={color} stopOpacity={0.6} />\n                          <stop offset=\"95%\" stopColor={color} stopOpacity={0} />\n                        </linearGradient>\n                      </defs>\n                    );\n                  })}\n\n                  {dataKeys.map((key) => {\n                    const transformedKey = transformedKeys[key];\n                    const color = `var(--color-${transformedKey})`;\n                    return (\n                      <Area\n                        key={`area-${key}`}\n                        dataKey={key}\n                        type={variant}\n                        stroke={color}\n                        fill={`url(#${gradientID}-${transformedKey})`}\n                        fillOpacity={1}\n                        stackId=\"a\"\n                        activeDot={<ActiveDot key={`active-dot-${key}-${id}`} />}\n                        dot={false}\n                        isAnimationActive={isAnimationActive}\n                        // strokeWidth={2}\n                      />\n                    );\n                  })}\n                </RechartsAreaChart>\n              </ChartContainer>\n            </div>\n            {isSideBarTooltipOpen && <SideBarTooltip height={effectiveHeight} />}\n          </div>\n          {xAxisLabel && (\n            <div className=\"openui-area-chart-condensed-x-axis-label\">{xAxisLabel}</div>\n          )}\n          {legend && (\n            <DefaultLegend\n              items={legendItems}\n              containerWidth={effectiveWidth}\n              isExpanded={isLegendExpanded}\n              setIsExpanded={setIsLegendExpanded}\n            />\n          )}\n        </div>\n      </SideBarTooltipProvider>\n    </LabelTooltipProvider>\n  );\n};\n\n// Added React.memo for performance optimization to avoid unnecessary re-renders\nexport const AreaChartCondensed = React.memo(\n  AreaChartCondensedComponent,\n) as typeof AreaChartCondensedComponent;\n","import { BarChartVariant } from \"../../types\";\n\nexport const getRadiusArray = (\n  variant: BarChartVariant,\n  radius: number,\n  orientation: \"vertical\" | \"horizontal\",\n  isFirst?: boolean,\n  isLast?: boolean,\n  isNegative?: boolean,\n): [number, number, number, number] => {\n  if (variant === \"grouped\") {\n    if (orientation === \"vertical\") {\n      if (isNegative) {\n        return [0, 0, radius, radius]; // bottom-right, bottom-left for negative bars\n      }\n      return [radius, radius, 0, 0]; // top-left, top-right for positive bars\n    } else {\n      // horizontal\n      if (isNegative) {\n        return [radius, 0, 0, radius]; // top-left, bottom-left for negative bars\n      }\n      return [0, radius, radius, 0]; // top-right, bottom-right for positive bars\n    }\n  } else if (variant === \"stacked\") {\n    // For single-item stacks, round the end of the bar.\n    if (isFirst && isLast) {\n      if (orientation === \"vertical\") {\n        return isNegative ? [0, 0, radius, radius] : [radius, radius, 0, 0];\n      } else {\n        // horizontal\n        return isNegative ? [radius, 0, 0, radius] : [0, radius, radius, 0];\n      }\n    }\n\n    // For multi-item stacks, only round the last bar in the stack.\n    if (orientation === \"vertical\") {\n      if (isLast) {\n        // Top of the stack for vertical bar\n        if (isNegative) {\n          return [0, 0, radius, radius];\n        }\n        return [radius, radius, 0, 0];\n      }\n    } else {\n      // horizontal\n      if (isLast) {\n        // Right of the stack for horizontal bar\n        if (isNegative) {\n          return [radius, 0, 0, radius];\n        }\n        return [0, radius, radius, 0];\n      }\n    }\n    // First and middle bars of the stack have no rounding.\n    return [0, 0, 0, 0];\n  }\n  // Default or other variants\n  return [radius, radius, radius, radius];\n};\n\nexport const findNearestSnapPosition = (\n  snapPositions: number[],\n  currentScroll: number,\n  direction: \"up\" | \"down\" | \"left\" | \"right\",\n): number => {\n  // Find current position index\n  let currentIndex = 0;\n  for (let i = 0; i < snapPositions.length; i++) {\n    const snapPosition = snapPositions[i]!;\n    if (currentScroll >= snapPosition) {\n      currentIndex = i;\n    } else {\n      break;\n    }\n  }\n\n  if (direction === \"up\" || direction === \"left\") {\n    // Go to previous snap position\n    return Math.max(0, currentIndex - 1);\n  } else {\n    // Go to next snap position\n    return Math.min(snapPositions.length - 1, currentIndex + 1);\n  }\n};\n\nexport interface BarStackInfo {\n  isNegative: boolean;\n  isFirstInStack?: boolean;\n  isLastInStack?: boolean;\n  hasNegativeValueInStack?: boolean;\n}\n\nexport function getBarStackInfo(\n  variant: \"grouped\" | \"stacked\",\n  value: number | [number, number],\n  dataKey: string,\n  payload: Record<string, unknown>,\n  dataKeys: string[],\n): BarStackInfo {\n  const isNegative = Array.isArray(value) ? value[0] <= 0 && value[1] < 0 : value < 0;\n\n  if (variant !== \"stacked\") {\n    return { isNegative };\n  }\n\n  const stackedKeys = dataKeys.filter((k) => typeof payload[k] === \"number\");\n  const positiveKeys = stackedKeys.filter((k) => (payload[k] as number) >= 0);\n  const negativeKeys = stackedKeys.filter((k) => (payload[k] as number) < 0);\n  const hasNegativeValueInStack = negativeKeys.length > 0;\n\n  const keys = isNegative ? negativeKeys : positiveKeys;\n  const currentIndex = keys.indexOf(dataKey);\n  const isFirstInStack = currentIndex === 0;\n  const isLastInStack = currentIndex === keys.length - 1;\n\n  return {\n    isNegative,\n    isFirstInStack,\n    isLastInStack,\n    hasNegativeValueInStack,\n  };\n}\n","import { getDataKeys } from \"../../utils/dataUtils\";\nimport { BarChartVariant } from \"../types\";\n\nexport const BAR_WIDTH = 16;\n\n// Internal constants - not exported as they're only used within this file\nconst ELEMENT_SPACING_GROUPED = 56; // Spacing per bar in grouped charts\n\nconst ELEMENT_SPACING_STACKED = 56; // Spacing per stack in stacked charts\n\n/**\n * INTERNAL HELPER FUNCTION\n * Get the appropriate element spacing based on chart variant\n * @param variant - The chart variant\n * @returns The spacing value for the given variant\n */\nconst getElementSpacing = (variant: BarChartVariant): number => {\n  switch (variant) {\n    case \"stacked\":\n      return ELEMENT_SPACING_STACKED;\n    case \"grouped\":\n    default:\n      return ELEMENT_SPACING_GROUPED;\n  }\n};\n\n/**\n * This function returns the width of the data in the chart, used for padding calculation, scroll amount calculation, and\n * for the width of the chart container.\n * @param data - The data to be displayed in the chart.\n * @param categoryKey - The key of the category to be displayed in the chart.\n * @param variant - The variant of the chart.\n */\nconst getWidthOfData = (\n  data: Array<Record<string, string | number>>,\n  categoryKey: string,\n  variant: BarChartVariant,\n) => {\n  if (data.length === 0) {\n    return 0;\n  }\n\n  const width = data.length * getWidthOfGroup(data, categoryKey, variant);\n\n  if (data.length === 1) {\n    const minSingleDataWidth = 200; // Minimum width for single data points\n    return Math.max(width, minSingleDataWidth);\n  }\n  return width;\n};\n\n/**\n * This function returns the padding for the chart, used for the padding of the chart container.\n * @param data - The data to be displayed in the chart.\n * @param categoryKey - The key of the category to be displayed in the chart.\n * @param containerWidth - The width of the container of the chart.\n * @param variant - The variant of the chart.\n */\nconst getPadding = (\n  data: Array<Record<string, string | number>>,\n  categoryKey: string,\n  containerWidth: number,\n  variant: BarChartVariant,\n) => {\n  const chartWidth = getWidthOfData(data, categoryKey, variant);\n  const paddingValue = containerWidth - chartWidth;\n\n  if (paddingValue < 0) {\n    // If chart content is wider than container, no padding\n    return {\n      left: 10,\n      right: 10,\n    };\n  } else {\n    return {\n      left: paddingValue / 2,\n      right: paddingValue / 2,\n    };\n  }\n};\n\n/**\n * This function returns the scroll amount for the chart, used for the scroll amount of the chart.\n * This can also be used to calculate the width of each group/category.\n * @param data - The data to be displayed in the chart.\n * @param categoryKey - The key of the category to be displayed in the chart.\n * @param variant - The variant of the chart.\n */\nconst getWidthOfGroup = (\n  data: Array<Record<string, string | number>>,\n  categoryKey: string,\n  variant: BarChartVariant,\n) => {\n  if (data.length === 0) return 200; // Fallback\n\n  // Get the number of data keys (excluding categoryKey)\n  const dataKeys = getDataKeys(data, categoryKey);\n  const elementSpacing = getElementSpacing(variant);\n\n  if (variant === \"stacked\") {\n    // For stacked: each category is one stack\n    // Example: month \"January\" = 1 stack = BAR_WIDTH + ELEMENT_SPACING_STACKED (60)\n    return BAR_WIDTH + elementSpacing;\n  } else {\n    // For grouped: each category contains multiple bars\n    // Example: month \"January\" with desktop+mobile+tablet = 3 bars\n    // Width = 3 * (BAR_WIDTH + gap between bars) - gap between bars for the last bar + elementSpacing\n    const seriesPerCategory = dataKeys.length;\n    return seriesPerCategory * (BAR_WIDTH + 8) - 8 + elementSpacing;\n  }\n};\n\n/**\n * This function returns the snap positions for the chart, used for the snap positions of the chart.\n * @param data - The data to be displayed in the chart.\n * @param categoryKey - The key of the category to be displayed in the chart.\n * @param variant - The variant of the chart.\n * @returns The snap positions for the chart.\n */\nconst getSnapPositions = (\n  data: Array<Record<string, string | number>>,\n  categoryKey: string,\n  variant: BarChartVariant,\n): number[] => {\n  if (data.length === 0) return [0];\n\n  const positions = [0]; // Start position\n  const groupWidthValue = getWidthOfGroup(data, categoryKey, variant);\n\n  // Calculate all valid snap positions based on groups\n  for (let i = 1; i < data.length; i++) {\n    positions.push(i * groupWidthValue);\n  }\n\n  return positions;\n};\n\nexport { getPadding, getSnapPositions, getWidthOfData, getWidthOfGroup };\n","import clsx from \"clsx\";\nimport React, { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { Bar, BarChart as RechartsBarChart, XAxis, YAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { useTheme } from \"../../ThemeProvider\";\nimport { ChartConfig, ChartContainer, ChartTooltip } from \"../Charts\";\nimport { SideBarChartData, SideBarTooltipProvider } from \"../context/SideBarTooltipContext\";\nimport {\n  useExportChartData,\n  useMaxLabelHeight,\n  useTransformedKeys,\n  useYAxisLabelWidth,\n} from \"../hooks\";\nimport {\n  cartesianGrid,\n  CustomTooltipContent,\n  DefaultLegend,\n  LineInBarShape,\n  SideBarTooltip,\n  XAxisTick,\n  XAxisTickProps,\n  YAxisTick,\n} from \"../shared\";\n\nimport { ScrollButtonsHorizontal } from \"../shared/ScrollButtonsHorizontal/ScrollButtonsHorizontal\";\nimport { XAxisTickVariant } from \"../types\";\nimport { type LegendItem } from \"../types/Legend\";\nimport { useChartPalette, type PaletteName } from \"../utils/PalletUtils\";\n\nimport { LabelTooltipProvider } from \"../shared/LabelTooltip/LabelTooltip\";\nimport {\n  findNearestSnapPosition,\n  getBarStackInfo,\n  getRadiusArray,\n} from \"../utils/BarCharts/BarChartsUtils\";\nimport {\n  get2dChartConfig,\n  getColorForDataKey,\n  getDataKeys,\n  getLegendItems,\n} from \"../utils/dataUtils\";\nimport { BarChartData, BarChartVariant } from \"./types\";\nimport {\n  BAR_WIDTH,\n  getPadding,\n  getSnapPositions,\n  getWidthOfData,\n  getWidthOfGroup,\n} from \"./utils/BarChartUtils\";\n\n// this a technic to get the type of the onClick event of the bar chart\n// we need to do this because the onClick event type is not exported by recharts\ntype BarChartOnClick = React.ComponentProps<typeof RechartsBarChart>[\"onClick\"];\ntype BarClickData = Parameters<NonNullable<BarChartOnClick>>[0];\nexport interface BarChartProps<T extends BarChartData> {\n  data: T;\n  categoryKey: keyof T[number];\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: BarChartVariant;\n  tickVariant?: XAxisTickVariant;\n  grid?: boolean;\n  radius?: number;\n  icons?: Partial<Record<keyof T[number], React.ComponentType>>;\n  isAnimationActive?: boolean;\n  showYAxis?: boolean;\n  xAxisLabel?: React.ReactNode;\n  yAxisLabel?: React.ReactNode;\n  legend?: boolean;\n  className?: string;\n  height?: number;\n  width?: number;\n}\n\nconst BAR_GAP = 10; // Gap between bars\nconst BAR_CATEGORY_GAP = \"20%\"; // Gap between categories\nconst BAR_INTERNAL_LINE_WIDTH = 1;\nconst BAR_RADIUS = 4;\nconst CHART_CONTAINER_BOTTOM_MARGIN = 10;\n\nconst BarChartComponent = <T extends BarChartData>({\n  data,\n  categoryKey,\n  theme = \"ocean\",\n  customPalette,\n  variant = \"grouped\",\n  tickVariant = \"multiLine\",\n  grid = true,\n  icons = {},\n  radius,\n  isAnimationActive = false,\n  showYAxis = true,\n  xAxisLabel,\n  yAxisLabel,\n  legend = true,\n  className,\n  height,\n  width,\n}: BarChartProps<T>) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const widthOfGroup = getWidthOfGroup(data, categoryKey as string, variant);\n\n  const maxLabelHeight = useMaxLabelHeight(data, categoryKey as string, tickVariant, widthOfGroup);\n\n  const dataKeys = useMemo(() => {\n    return getDataKeys(data, categoryKey as string);\n  }, [data, categoryKey]);\n\n  const { yAxisWidth, setLabelWidth } = useYAxisLabelWidth(data, dataKeys);\n\n  const transformedKeys = useTransformedKeys(dataKeys);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"barChartPalette\",\n    dataLength: dataKeys.length,\n  });\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig(dataKeys, colors, transformedKeys, undefined, icons);\n  }, [dataKeys, icons, colors, transformedKeys]);\n\n  const chartContainerRef = useRef<HTMLDivElement>(null);\n  const mainContainerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n  const [canScrollLeft, setCanScrollLeft] = useState(false);\n  const [canScrollRight, setCanScrollRight] = useState(false);\n  const [hoveredCategory, setHoveredCategory] = useState<string | number | null>(null);\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n  const [isSideBarTooltipOpen, setIsSideBarTooltipOpen] = useState(false);\n  const [sideBarTooltipData, setSideBarTooltipData] = useState<SideBarChartData>({\n    title: \"\",\n    values: [],\n  });\n\n  // Use provided width or observed width\n  const effectiveWidth = useMemo(() => {\n    return width ?? containerWidth;\n  }, [width, containerWidth]);\n\n  // need this to calculate the padding for the chart container, because the y-axis is rendered in a separate chart\n  const effectiveContainerWidth = useMemo(() => {\n    const dynamicYAxisWidth = showYAxis ? yAxisWidth : 0;\n    return Math.max(0, effectiveWidth - dynamicYAxisWidth);\n  }, [effectiveWidth, showYAxis, yAxisWidth]);\n\n  const padding = useMemo(() => {\n    return getPadding(data, categoryKey as string, effectiveContainerWidth, variant);\n  }, [data, categoryKey, effectiveContainerWidth, variant]);\n\n  const dataWidth = useMemo(() => {\n    return getWidthOfData(data, categoryKey as string, variant);\n  }, [data, categoryKey, variant]);\n\n  // Calculate snap positions for proper group alignment\n  const snapPositions = useMemo(() => {\n    return getSnapPositions(data, categoryKey as string, variant);\n  }, [data, categoryKey, variant]);\n\n  // self note:\n  // Use provided height or calculated height based on container width\n  // if height is provided, it will be used to set the height of the chart\n  // if height is not provided, it will be calculated based on the container width (effectiveWidth)\n  // getChartHeight(effectiveWidth) this function is not used here, request of the designer, we will use fix height\n  // 296 is the height of the chart by default, given by designer\n  // we want to chart to scale with width but height will be fixed\n\n  const chartHeight = useMemo(() => {\n    return height ?? 296 + maxLabelHeight;\n  }, [height, maxLabelHeight]);\n\n  // Check scroll boundaries\n  const updateScrollState = useCallback(() => {\n    if (mainContainerRef.current) {\n      const { scrollLeft, scrollWidth, clientWidth } = mainContainerRef.current;\n      setCanScrollLeft(scrollLeft > 0);\n      setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 1); // -1 for floating point precision\n    }\n  }, []);\n\n  const scrollLeft = useCallback(() => {\n    if (mainContainerRef.current) {\n      const currentScroll = mainContainerRef.current.scrollLeft;\n      const targetIndex = findNearestSnapPosition(snapPositions, currentScroll, \"left\");\n      const targetPosition = snapPositions[targetIndex] ?? 0;\n\n      mainContainerRef.current.scrollTo({\n        left: targetPosition,\n        behavior: \"smooth\",\n      });\n    }\n  }, [snapPositions]);\n\n  const scrollRight = useCallback(() => {\n    if (mainContainerRef.current) {\n      const currentScroll = mainContainerRef.current.scrollLeft;\n      const targetIndex = findNearestSnapPosition(snapPositions, currentScroll, \"right\");\n      const targetPosition = snapPositions[targetIndex] ?? 0;\n\n      mainContainerRef.current.scrollTo({\n        left: targetPosition,\n        behavior: \"smooth\",\n      });\n    }\n  }, [snapPositions]);\n\n  useEffect(() => {\n    // Only set up ResizeObserver if width is not provided\n    if (width || !chartContainerRef.current) {\n      return () => {};\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      // there is only one entry in the entries array because we are observing the chart container\n      for (const entry of entries) {\n        setContainerWidth(entry.contentRect.width);\n      }\n    });\n\n    resizeObserver.observe(chartContainerRef.current);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [width]);\n\n  // Update scroll state when container width or data width changes\n  useEffect(() => {\n    updateScrollState();\n  }, [effectiveWidth, dataWidth, updateScrollState]);\n\n  useEffect(() => {\n    setIsSideBarTooltipOpen(false);\n    setIsLegendExpanded(false);\n  }, [dataKeys]);\n\n  // Add scroll event listener to update button states\n  useEffect(() => {\n    const mainContainer = mainContainerRef.current;\n    if (!mainContainer) return;\n\n    const handleScroll = () => {\n      updateScrollState();\n    };\n\n    mainContainer.addEventListener(\"scroll\", handleScroll);\n    return () => {\n      mainContainer.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, [updateScrollState]);\n\n  // Memoize legend items creation\n  const legendItems: LegendItem[] = useMemo(() => {\n    return getLegendItems(dataKeys, colors, icons);\n  }, [dataKeys, colors, icons]);\n\n  const exportData = useExportChartData({\n    type: \"bar\",\n    data,\n    categoryKey: categoryKey as string,\n    dataKeys,\n    colors,\n    legend,\n    xAxisLabel,\n    yAxisLabel,\n  });\n\n  const id = useId();\n\n  const yAxis = useMemo(() => {\n    if (!showYAxis) {\n      return null;\n    }\n    return (\n      <div className=\"openui-bar-chart-y-axis-container\">\n        {/* Y-axis only chart - synchronized with main chart */}\n        <RechartsBarChart\n          key={`y-axis-bar-chart-${id}`}\n          width={yAxisWidth}\n          height={chartHeight}\n          data={data}\n          stackOffset=\"sign\"\n          margin={{\n            top: 20,\n            bottom: maxLabelHeight + CHART_CONTAINER_BOTTOM_MARGIN, // this is required for to give space for x-axis\n            left: 0,\n            right: 0,\n          }}\n        >\n          <YAxis\n            width={yAxisWidth}\n            tickLine={false}\n            axisLine={false}\n            tick={<YAxisTick setLabelWidth={setLabelWidth} />}\n          />\n          {/* Invisible bars to maintain scale synchronization */}\n          {dataKeys.map((key) => {\n            return (\n              <Bar\n                key={`yaxis-bar-chart-${key}`}\n                dataKey={key}\n                fill=\"transparent\"\n                stackId={variant === \"stacked\" ? \"a\" : undefined}\n                isAnimationActive={false}\n                maxBarSize={0}\n              />\n            );\n          })}\n        </RechartsBarChart>\n      </div>\n    );\n  }, [showYAxis, chartHeight, data, dataKeys, variant, id, maxLabelHeight, yAxisWidth]);\n\n  // Handle mouse events for group hovering\n  const handleChartMouseMove = useCallback((state: any) => {\n    if (state && state.activeLabel !== undefined) {\n      setHoveredCategory(state.activeLabel);\n    }\n  }, []);\n\n  const handleChartMouseLeave = useCallback(() => {\n    setHoveredCategory(null);\n  }, []);\n\n  const handleXAxisTickMouseEnter = useCallback((tickProps: XAxisTickProps) => {\n    if (typeof tickProps.payload?.value === \"string\") {\n      setHoveredCategory(tickProps.payload.value);\n    }\n  }, []);\n\n  const handleXAxisTickMouseLeave = useCallback(() => {\n    setHoveredCategory(null);\n  }, []);\n\n  const { mode, theme: userTheme } = useTheme();\n\n  const barInternalLineColor = useMemo(() => {\n    if (mode === \"light\") {\n      return \"rgba(255, 255, 255, 0.3)\";\n    }\n    return \"rgba(0, 0, 0, 0.3)\";\n  }, [mode]);\n\n  const calculatedRadius = useMemo(() => {\n    let radiusValue: number = BAR_RADIUS;\n\n    if (typeof radius === \"number\") {\n      radiusValue = radius;\n    } else {\n      const radiusTheme = userTheme.radius2xs;\n      if (radiusTheme) {\n        radiusValue = typeof radiusTheme === \"string\" ? parseInt(radiusTheme) : radiusTheme;\n      }\n    }\n\n    return radiusValue;\n  }, [userTheme.radius2xs, radius]);\n\n  const onBarsClick = useCallback(\n    (data: BarClickData) => {\n      if (data?.activePayload?.length && data.activePayload.length > 10) {\n        setIsSideBarTooltipOpen(true);\n        setSideBarTooltipData({\n          title: data.activeLabel as string,\n          values: data.activePayload.map((payload) => ({\n            value: payload.value as number,\n            label: payload.name || payload.dataKey,\n            color: getColorForDataKey(payload.dataKey, dataKeys, colors),\n          })),\n        });\n      }\n    },\n    [dataKeys, colors],\n  );\n\n  const barElements = useMemo(() => {\n    return dataKeys.map((key) => {\n      const transformedKey = transformedKeys[key];\n      const color = `var(--color-${transformedKey})`;\n\n      return (\n        <Bar\n          key={`main-${key}`}\n          dataKey={key}\n          fill={color}\n          stackId={variant === \"stacked\" ? \"a\" : undefined}\n          isAnimationActive={isAnimationActive}\n          maxBarSize={BAR_WIDTH}\n          barSize={BAR_WIDTH}\n          shape={(props: any) => {\n            const { payload, value, dataKey } = props;\n\n            const { isNegative, isFirstInStack, isLastInStack, hasNegativeValueInStack } =\n              getBarStackInfo(variant, value, dataKey, payload, dataKeys);\n\n            const customRadius = getRadiusArray(\n              variant,\n              calculatedRadius,\n              \"vertical\",\n              isFirstInStack,\n              isLastInStack,\n              isNegative,\n            );\n\n            return (\n              <LineInBarShape\n                {...props}\n                radius={customRadius}\n                internalLineColor={barInternalLineColor}\n                internalLineWidth={BAR_INTERNAL_LINE_WIDTH}\n                isHovered={hoveredCategory !== null}\n                hoveredCategory={hoveredCategory}\n                categoryKey={categoryKey as string}\n                variant={variant}\n                hasNegativeValueInStack={hasNegativeValueInStack}\n              />\n            );\n          }}\n        />\n      );\n    });\n  }, [\n    dataKeys,\n    transformedKeys,\n    variant,\n    calculatedRadius,\n    isAnimationActive,\n    barInternalLineColor,\n    hoveredCategory,\n    categoryKey,\n  ]);\n\n  return (\n    <LabelTooltipProvider>\n      <SideBarTooltipProvider\n        isSideBarTooltipOpen={isSideBarTooltipOpen}\n        setIsSideBarTooltipOpen={setIsSideBarTooltipOpen}\n        data={sideBarTooltipData}\n        setData={setSideBarTooltipData}\n      >\n        <div\n          className={clsx(\"openui-bar-chart-container\", className)}\n          data-openui-chart={exportData}\n          style={{\n            width: width ? `${width}px` : undefined,\n          }}\n        >\n          <div className=\"openui-bar-chart-container-inner\" ref={chartContainerRef}>\n            {/* Y-axis of the chart */}\n            {yAxis}\n            <div className=\"openui-bar-chart-main-container\" ref={mainContainerRef}>\n              <ChartContainer\n                config={chartConfig}\n                style={{ width: dataWidth, minWidth: \"100%\", height: chartHeight }}\n                rechartsProps={{\n                  width: \"100%\",\n                  height: \"100%\",\n                  minHeight: 1,\n                  minWidth: 1,\n                  initialDimension: { width: 1, height: 1 },\n                }}\n              >\n                <RechartsBarChart\n                  stackOffset=\"sign\"\n                  accessibilityLayer\n                  key={`bar-chart-${id}`}\n                  data={data}\n                  margin={{\n                    top: 20,\n                    bottom: CHART_CONTAINER_BOTTOM_MARGIN,\n                  }}\n                  onClick={onBarsClick}\n                  onMouseMove={handleChartMouseMove}\n                  onMouseLeave={handleChartMouseLeave}\n                  barGap={BAR_GAP}\n                  barCategoryGap={BAR_CATEGORY_GAP}\n                >\n                  {grid && cartesianGrid()}\n                  <XAxis\n                    dataKey={categoryKey as string}\n                    tickLine={false}\n                    axisLine={false}\n                    textAnchor={\"middle\"}\n                    interval={0}\n                    height={maxLabelHeight}\n                    tick={\n                      <XAxisTick\n                        variant={tickVariant}\n                        widthOfGroup={widthOfGroup}\n                        labelHeight={maxLabelHeight}\n                        onMouseEnter={handleXAxisTickMouseEnter}\n                        onMouseLeave={handleXAxisTickMouseLeave}\n                      />\n                    }\n                    orientation=\"bottom\"\n                    // gives the padding on the 2 sides see the function for reference\n                    padding={padding}\n                  />\n                  {/* Y-axis is rendered in the separate synchronized chart */}\n\n                  <ChartTooltip\n                    // cursor={<SimpleCursor />}\n                    cursor={{\n                      fill: \"var(--openui-highlight)\",\n                      stroke: \"var(--openui-stroke-default)\",\n                      opacity: 1,\n                      strokeWidth: 1,\n                    }}\n                    content={<CustomTooltipContent parentRef={mainContainerRef} />}\n                    offset={15}\n                  />\n\n                  {barElements}\n                </RechartsBarChart>\n              </ChartContainer>\n            </div>\n            {isSideBarTooltipOpen && <SideBarTooltip height={chartHeight} />}\n          </div>\n          {/* if the data width is greater than the effective width, then show the scroll buttons */}\n          <ScrollButtonsHorizontal\n            dataWidth={dataWidth}\n            effectiveWidth={effectiveWidth}\n            canScrollLeft={canScrollLeft}\n            canScrollRight={canScrollRight}\n            isSideBarTooltipOpen={isSideBarTooltipOpen}\n            onScrollLeft={scrollLeft}\n            onScrollRight={scrollRight}\n          />\n          {legend && (\n            <DefaultLegend\n              items={legendItems}\n              yAxisLabel={yAxisLabel}\n              xAxisLabel={xAxisLabel}\n              containerWidth={effectiveWidth}\n              isExpanded={isLegendExpanded}\n              setIsExpanded={setIsLegendExpanded}\n            />\n          )}\n        </div>\n      </SideBarTooltipProvider>\n    </LabelTooltipProvider>\n  );\n};\n\n// Added React.memo for performance optimization to avoid unnecessary re-renders\nexport const BarChart = React.memo(BarChartComponent) as typeof BarChartComponent;\n","import clsx from \"clsx\";\nimport React, { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { Bar, BarChart as RechartsBarChart, XAxis, YAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { useTheme } from \"../../ThemeProvider\";\nimport { BarChartData, BarChartVariant } from \"../BarChart/types\";\nimport { ChartConfig, ChartContainer, ChartTooltip } from \"../Charts\";\nimport { DEFAULT_X_AXIS_HEIGHT, X_AXIS_PADDING } from \"../constants\";\nimport { SideBarChartData, SideBarTooltipProvider } from \"../context/SideBarTooltipContext\";\nimport {\n  useAutoAngleCalculation,\n  useExportChartData,\n  useMaxLabelWidth,\n  useTransformedKeys,\n  useYAxisLabelWidth,\n} from \"../hooks\";\nimport {\n  cartesianGrid,\n  CustomTooltipContent,\n  DefaultLegend,\n  LineInBarShape,\n  SideBarTooltip,\n  SVGXAxisTick,\n  SVGXAxisTickVariant,\n  YAxisTick,\n} from \"../shared\";\nimport { LabelTooltipProvider } from \"../shared/LabelTooltip/LabelTooltip\";\nimport { LegendItem } from \"../types\";\nimport { getBarStackInfo, getRadiusArray } from \"../utils/BarCharts/BarChartsUtils\";\nimport {\n  get2dChartConfig,\n  getColorForDataKey,\n  getDataKeys,\n  getLegendItems,\n} from \"../utils/dataUtils\";\nimport { PaletteName, useChartPalette } from \"../utils/PalletUtils\";\n\n// this a technic to get the type of the onClick event of the bar chart\n// we need to do this because the onClick event type is not exported by recharts\ntype BarChartOnClick = React.ComponentProps<typeof RechartsBarChart>[\"onClick\"];\ntype BarClickData = Parameters<NonNullable<BarChartOnClick>>[0];\n\nexport interface BarChartCondensedProps<T extends BarChartData> {\n  data: T;\n  categoryKey: keyof T[number];\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: BarChartVariant;\n  tickVariant?: SVGXAxisTickVariant;\n  grid?: boolean;\n  radius?: number;\n  icons?: Partial<Record<keyof T[number], React.ComponentType>>;\n  isAnimationActive?: boolean;\n  showYAxis?: boolean;\n  xAxisLabel?: React.ReactNode;\n  yAxisLabel?: React.ReactNode;\n  legend?: boolean;\n  className?: string;\n  height?: number;\n  width?: number;\n  /** Maximum bar width in pixels. Prevents bars from becoming too wide. Default: 12 */\n  maxBarWidth?: number;\n}\n\n// Default maximum bar width - prevents bars from becoming too wide with sparse data\nconst DEFAULT_MAX_BAR_WIDTH = 12;\n\n// Layout constants\nconst BAR_GAP = 10;\nconst BAR_CATEGORY_GAP = \"20%\";\nconst BAR_INTERNAL_LINE_WIDTH = 1;\nconst BAR_RADIUS = 4;\nconst CHART_HEIGHT = 296;\nconst CHART_CONTAINER_BOTTOM_MARGIN = 10;\n\nconst BarChartCondensedComponent = <T extends BarChartData>({\n  data,\n  categoryKey,\n  theme = \"ocean\",\n  customPalette,\n  variant = \"grouped\",\n  tickVariant = \"singleLine\",\n  grid = true,\n  icons = {},\n  radius,\n  isAnimationActive = false,\n  showYAxis = true,\n  xAxisLabel,\n  yAxisLabel,\n  legend = true,\n  className,\n  height = CHART_HEIGHT,\n  width,\n  maxBarWidth = DEFAULT_MAX_BAR_WIDTH,\n}: BarChartCondensedProps<T>) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const dataKeys = useMemo(() => {\n    return getDataKeys(data, categoryKey as string);\n  }, [data, categoryKey]);\n\n  const { yAxisWidth, setLabelWidth } = useYAxisLabelWidth(data, dataKeys);\n\n  const maxLabelWidth = useMaxLabelWidth(data, categoryKey as string);\n\n  const chartContainerRef = useRef<HTMLDivElement>(null);\n  const [chartContainerWidth, setChartContainerWidth] = useState<number>(0);\n\n  const widthOfData = useMemo(() => {\n    if (data.length === 0) {\n      return 0;\n    }\n    // Use passed width if available, otherwise use observed chartContainerWidth\n    const chartWidth = width ?? chartContainerWidth;\n    return chartWidth / data.length;\n  }, [chartContainerWidth, data, width]);\n\n  const { angle: calculatedAngle, height: xAxisHeight } = useAutoAngleCalculation(\n    maxLabelWidth,\n    tickVariant === \"angled\",\n    maxLabelWidth < 100 ? widthOfData : undefined,\n  );\n\n  const isAngled = useMemo(() => {\n    return calculatedAngle !== 0;\n  }, [calculatedAngle]);\n\n  const effectiveHeight = useMemo(() => {\n    if (tickVariant === \"angled\") {\n      return xAxisHeight + height;\n    }\n    return height + DEFAULT_X_AXIS_HEIGHT;\n  }, [height, xAxisHeight, tickVariant]);\n\n  const transformedKeys = useTransformedKeys(dataKeys);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"barChartPalette\",\n    dataLength: dataKeys.length,\n  });\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig(dataKeys, colors, transformedKeys, undefined, icons);\n  }, [dataKeys, icons, colors, transformedKeys]);\n\n  const id = useId();\n\n  const exportData = useExportChartData({\n    type: \"bar\",\n    data,\n    categoryKey: categoryKey as string,\n    dataKeys,\n    colors,\n    legend,\n    xAxisLabel,\n    yAxisLabel,\n  });\n\n  const chartMargin = useMemo(\n    () => ({\n      top: 10,\n      right: 10,\n      bottom: CHART_CONTAINER_BOTTOM_MARGIN,\n      left: showYAxis ? 10 : 0,\n    }),\n    [showYAxis],\n  );\n\n  const { mode, theme: userTheme } = useTheme();\n\n  const calculatedRadius = useMemo(() => {\n    let radiusValue: number = BAR_RADIUS;\n\n    if (typeof radius === \"number\") {\n      radiusValue = radius;\n    } else {\n      const radiusTheme = userTheme.radius2xs;\n      if (radiusTheme) {\n        radiusValue = typeof radiusTheme === \"string\" ? parseInt(radiusTheme) : radiusTheme;\n      }\n    }\n\n    return radiusValue;\n  }, [userTheme.radius2xs, radius]);\n\n  const barInternalLineColor = useMemo(() => {\n    if (mode === \"light\") {\n      return \"rgba(255, 255, 255, 0.3)\";\n    }\n    return \"rgba(0, 0, 0, 0.3)\";\n  }, [mode]);\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n  const [isSideBarTooltipOpen, setIsSideBarTooltipOpen] = useState(false);\n  const [sideBarTooltipData, setSideBarTooltipData] = useState<SideBarChartData>({\n    title: \"\",\n    values: [],\n  });\n  const [hoveredCategory, setHoveredCategory] = useState<string | number | null>(null);\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n\n  // Use provided width or observed width\n  const effectiveWidth = useMemo(() => {\n    return width ?? containerWidth;\n  }, [width, containerWidth]);\n\n  // Calculate explicit chart width when width prop is provided\n  // This allows Recharts to calculate bar dimensions on first render\n  const explicitChartWidth = useMemo(() => {\n    if (!width) return undefined;\n    // Subtract Y-axis width and margins to get the actual chart area width\n    const yAxisSpace = showYAxis ? yAxisWidth : 0;\n    return width - yAxisSpace - chartMargin.left - chartMargin.right;\n  }, [width, showYAxis, yAxisWidth, chartMargin.left, chartMargin.right]);\n\n  // Calculate optimal bar width based on available space\n  // Only applies maximum constraint - Recharts handles thin bars automatically\n  const calculatedBarWidth = useMemo(() => {\n    // Use explicitChartWidth if available, otherwise fall back to chartContainerWidth\n    const availableWidth = explicitChartWidth ?? chartContainerWidth;\n\n    // If no width available, return undefined and let Recharts auto-size\n    if (!availableWidth || availableWidth === 0 || data.length === 0) {\n      return undefined;\n    }\n\n    // Calculate space per category (Recharts handles gaps automatically via barGap and barCategoryGap props)\n    const spacePerCategory = availableWidth / data.length;\n\n    // For grouped charts, multiple bars share the category space\n    const barsPerCategory = variant === \"stacked\" ? 1 : dataKeys.length;\n\n    // Simple division - let Recharts apply gaps via barGap and barCategoryGap props\n    const barWidth = spacePerCategory / barsPerCategory;\n\n    // Only apply maximum constraint, let Recharts handle thin bars automatically\n    return Math.min(maxBarWidth, barWidth);\n  }, [explicitChartWidth, chartContainerWidth, data.length, dataKeys.length, variant, maxBarWidth]);\n\n  // Handle mouse events for bar hovering\n  const handleChartMouseMove = useCallback((state: any) => {\n    if (state && state.activeLabel !== undefined) {\n      setHoveredCategory(state.activeLabel);\n    }\n  }, []);\n\n  const handleChartMouseLeave = useCallback(() => {\n    setHoveredCategory(null);\n  }, []);\n\n  const onBarClick = useCallback(\n    (data: BarClickData) => {\n      if (data?.activePayload?.length && data.activePayload.length > 10) {\n        setIsSideBarTooltipOpen(true);\n        setSideBarTooltipData({\n          title: data.activeLabel as string,\n          values: data.activePayload.map((payload) => ({\n            value: payload.value as number,\n            label: payload.name || payload.dataKey,\n            color: getColorForDataKey(payload.dataKey, dataKeys, colors),\n          })),\n        });\n      }\n    },\n    [dataKeys, colors],\n  );\n\n  // Observe container width for legend\n  useEffect(() => {\n    // Always set up ResizeObserver for chartContainerRef to get accurate bar width calculations\n    if (!chartContainerRef.current) {\n      return () => {};\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      // there is only one entry in the entries array because we are observing the chart container\n      for (const entry of entries) {\n        if (entry.target === containerRef.current && !width) {\n          // Only observe containerRef if width is not provided\n          setContainerWidth(entry.contentRect.width);\n        }\n        if (entry.target === chartContainerRef.current) {\n          setChartContainerWidth(entry.contentRect.width);\n        }\n      }\n    });\n\n    // Always observe chartContainerRef\n    resizeObserver.observe(chartContainerRef.current);\n\n    // Only observe containerRef if width is not provided\n    if (!width && containerRef.current) {\n      resizeObserver.observe(containerRef.current);\n    }\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [width]);\n\n  useEffect(() => {\n    setIsLegendExpanded(false);\n  }, [dataKeys]);\n\n  // Memoize legend items creation\n  const legendItems: LegendItem[] = useMemo(() => {\n    if (!legend) {\n      return [];\n    }\n    return getLegendItems(dataKeys, colors, icons);\n  }, [dataKeys, colors, icons, legend]);\n\n  const yAxis = useMemo(() => {\n    if (!showYAxis) {\n      return null;\n    }\n    return (\n      <div className=\"openui-bar-chart-condensed-y-axis-container\">\n        {/* Y-axis only chart - synchronized with main chart */}\n        <RechartsBarChart\n          key={`y-axis-bar-chart-condensed-${id}`}\n          width={yAxisWidth}\n          height={effectiveHeight}\n          data={data}\n          stackOffset=\"sign\"\n          margin={{\n            top: chartMargin.top,\n            bottom: xAxisHeight + chartMargin.bottom, // this is required to give space for x-axis\n            left: 0,\n            right: 0,\n          }}\n        >\n          <YAxis\n            width={yAxisWidth}\n            tickLine={false}\n            axisLine={false}\n            tick={<YAxisTick setLabelWidth={setLabelWidth} />}\n          />\n          {/* Invisible bars to maintain scale synchronization */}\n          {dataKeys.map((key) => {\n            return (\n              <Bar\n                key={`yaxis-bar-chart-condensed-${key}`}\n                dataKey={key}\n                fill=\"transparent\"\n                stackId={variant === \"stacked\" ? \"a\" : undefined}\n                isAnimationActive={false}\n                maxBarSize={0}\n              />\n            );\n          })}\n        </RechartsBarChart>\n      </div>\n    );\n  }, [\n    showYAxis,\n    effectiveHeight,\n    data,\n    dataKeys,\n    variant,\n    id,\n    yAxisWidth,\n    chartMargin,\n    xAxisHeight,\n    setLabelWidth,\n  ]);\n\n  const barElements = useMemo(() => {\n    return dataKeys.map((key) => {\n      const transformedKey = transformedKeys[key];\n      const color = `var(--color-${transformedKey})`;\n\n      return (\n        <Bar\n          key={`bar-${key}`}\n          dataKey={key}\n          fill={color}\n          stackId={variant === \"stacked\" ? \"a\" : undefined}\n          isAnimationActive={isAnimationActive}\n          maxBarSize={calculatedBarWidth}\n          barSize={calculatedBarWidth}\n          shape={(props: any) => {\n            const { payload, value, dataKey } = props;\n\n            const { isNegative, isFirstInStack, isLastInStack, hasNegativeValueInStack } =\n              getBarStackInfo(variant, value, dataKey, payload, dataKeys);\n\n            const customRadius = getRadiusArray(\n              variant,\n              calculatedRadius,\n              \"vertical\",\n              isFirstInStack,\n              isLastInStack,\n              isNegative,\n            );\n\n            return (\n              <LineInBarShape\n                {...props}\n                radius={customRadius}\n                internalLineColor={barInternalLineColor}\n                internalLineWidth={BAR_INTERNAL_LINE_WIDTH}\n                isHovered={hoveredCategory !== null}\n                hoveredCategory={hoveredCategory}\n                categoryKey={categoryKey as string}\n                variant={variant}\n                hasNegativeValueInStack={hasNegativeValueInStack}\n              />\n            );\n          }}\n        />\n      );\n    });\n  }, [\n    dataKeys,\n    transformedKeys,\n    variant,\n    calculatedRadius,\n    isAnimationActive,\n    barInternalLineColor,\n    hoveredCategory,\n    categoryKey,\n    calculatedBarWidth,\n  ]);\n\n  return (\n    <LabelTooltipProvider>\n      <SideBarTooltipProvider\n        isSideBarTooltipOpen={isSideBarTooltipOpen}\n        setIsSideBarTooltipOpen={setIsSideBarTooltipOpen}\n        data={sideBarTooltipData}\n        setData={setSideBarTooltipData}\n      >\n        <div\n          className={clsx(\"openui-bar-chart-condensed-container\", className)}\n          data-openui-chart={exportData}\n          style={{\n            width: width ? `${width}px` : undefined,\n          }}\n        >\n          {yAxisLabel && (\n            <div className=\"openui-bar-chart-condensed-y-axis-label\">{yAxisLabel}</div>\n          )}\n          <div className=\"openui-bar-chart-condensed-container-inner\" ref={containerRef}>\n            {/* Y-axis of the chart */}\n            {yAxis}\n            <div className=\"openui-bar-chart-condensed\" ref={chartContainerRef}>\n              <ChartContainer\n                config={chartConfig}\n                style={{\n                  width: explicitChartWidth ? `${explicitChartWidth}px` : \"100%\",\n                  height: effectiveHeight,\n                }}\n                rechartsProps={{\n                  width: explicitChartWidth ?? \"100%\",\n                  height: effectiveHeight,\n                }}\n              >\n                <RechartsBarChart\n                  stackOffset=\"sign\"\n                  accessibilityLayer\n                  key={`bar-chart-condensed-${id}`}\n                  data={data}\n                  margin={chartMargin}\n                  barGap={BAR_GAP}\n                  barCategoryGap={BAR_CATEGORY_GAP}\n                  onMouseMove={handleChartMouseMove}\n                  onMouseLeave={handleChartMouseLeave}\n                  onClick={onBarClick}\n                  width={explicitChartWidth}\n                  height={effectiveHeight}\n                >\n                  {grid && cartesianGrid()}\n\n                  <XAxis\n                    dataKey={categoryKey as string}\n                    tickLine={false}\n                    axisLine={false}\n                    textAnchor={isAngled ? \"end\" : \"middle\"}\n                    interval=\"preserveStartEnd\"\n                    minTickGap={5}\n                    height={xAxisHeight}\n                    tick={<SVGXAxisTick />}\n                    angle={calculatedAngle}\n                    orientation=\"bottom\"\n                    padding={{\n                      left: X_AXIS_PADDING,\n                      right: X_AXIS_PADDING,\n                    }}\n                  />\n                  {/* Y-axis is rendered in the separate synchronized chart */}\n\n                  <ChartTooltip\n                    cursor={{\n                      fill: \"var(--openui-highlight)\",\n                      stroke: \"var(--openui-stroke-default)\",\n                      opacity: 1,\n                      strokeWidth: 1,\n                    }}\n                    content={<CustomTooltipContent parentRef={containerRef} />}\n                    offset={10}\n                  />\n\n                  {barElements}\n                </RechartsBarChart>\n              </ChartContainer>\n            </div>\n            {isSideBarTooltipOpen && <SideBarTooltip height={effectiveHeight} />}\n          </div>\n          {xAxisLabel && (\n            <div className=\"openui-bar-chart-condensed-x-axis-label\">{xAxisLabel}</div>\n          )}\n          {legend && (\n            <DefaultLegend\n              items={legendItems}\n              containerWidth={effectiveWidth}\n              isExpanded={isLegendExpanded}\n              setIsExpanded={setIsLegendExpanded}\n            />\n          )}\n        </div>\n      </SideBarTooltipProvider>\n    </LabelTooltipProvider>\n  );\n};\n\n// Added React.memo for performance optimization to avoid unnecessary re-renders\nexport const BarChartCondensed = React.memo(\n  BarChartCondensedComponent,\n) as typeof BarChartCondensedComponent;\n","import React from \"react\";\n\nimport { LineInBarShape } from \"../../shared\";\nimport { type HorizontalBarChartVariant } from \"../types\";\n\ninterface CustomBarShapeProps {\n  // from recharts (can be more)\n  x?: number;\n  y?: number;\n  width?: number;\n  height?: number;\n  payload?: any;\n  // from parent scope\n  index: number;\n  categoryKey: string;\n  effectiveWidth: number;\n  labelHeight: number;\n  barInternalLineColor: string;\n  internalLineWidth: number;\n  hoveredCategory: string | number | null;\n  variant: HorizontalBarChartVariant;\n}\n\nconst CustomBarShapeComponent = (props: CustomBarShapeProps) => {\n  const {\n    // recharts props\n    y,\n    payload,\n    // my props\n    index,\n    categoryKey,\n    effectiveWidth,\n    labelHeight,\n    barInternalLineColor,\n    internalLineWidth,\n    hoveredCategory,\n    variant,\n    // rest of recharts props to pass down\n    ...rest\n  } = props;\n\n  // y might be undefined if not passed by recharts, but it's used.\n  // The original code has `let { y } = barProps;`. If `barProps.y` is undefined, `y` is undefined.\n  // The same for `payload`.\n  if (y === undefined || !payload) {\n    return null; // Or some fallback\n  }\n\n  let label = null;\n  if (index === 0 && payload[categoryKey]) {\n    const labelX = 0;\n    const labelWidth = effectiveWidth;\n    const labelY = y - labelHeight / 2;\n    label = (\n      <foreignObject\n        x={labelX}\n        y={labelY}\n        width={labelWidth}\n        height={labelHeight}\n        style={{ pointerEvents: \"none\" }}\n        xmlns=\"http://www.w3.org/1999/xhtml\"\n      >\n        <div className=\"openui-horizontal-bar-chart-category-label\">{payload[categoryKey]}</div>\n      </foreignObject>\n    );\n  }\n\n  return (\n    <g>\n      {label}\n      <LineInBarShape\n        {...rest}\n        payload={payload}\n        y={y + labelHeight / 2}\n        internalLineColor={barInternalLineColor}\n        internalLineWidth={internalLineWidth}\n        isHovered={hoveredCategory !== null}\n        hoveredCategory={hoveredCategory}\n        categoryKey={categoryKey as string}\n        variant={variant}\n        orientation=\"horizontal\"\n      />\n    </g>\n  );\n};\n\nexport const CustomBarShape = React.memo(CustomBarShapeComponent);\n","import { useMemo } from \"react\";\n\nimport { useCanvasContextForLabelSize } from \"../../hooks/useCanvasContextForLabelSize\";\n\nexport const useMaxCategoryLabelWidth = (\n  data: Array<Record<string, string | number>>,\n  categoryKey: string,\n): number => {\n  const context = useCanvasContextForLabelSize();\n\n  return useMemo(() => {\n    if (data.length === 0) {\n      return 100; // Default fallback\n    }\n\n    if (!context) {\n      // Fallback if canvas is not available\n      return Math.max(...data.map((item) => String(item[categoryKey] || \"\").length * 8), 100);\n    }\n\n    return Math.max(\n      ...data.map((item) => {\n        const text = String(item[categoryKey] || \"\");\n        return context.measureText(text).width;\n      }),\n      100,\n    );\n  }, [data, categoryKey, context]);\n};\n","import { getDataKeys } from \"../../utils/dataUtils\";\nimport { HorizontalBarChartVariant } from \"../types\";\n\nexport const BAR_HEIGHT = 16;\nexport const BAR_GAP = 10;\n\n/**\n * This function returns the height of the data in the chart, used for padding calculation, scroll amount calculation, and\n * for the height of the chart container.\n * @param data - The data to be displayed in the chart.\n * @param categoryKey - The key of the category to be displayed in the chart.\n * @param variant - The variant of the chart.\n * @param labelHeight - The height of the category label.\n */\nconst getHeightOfData = (\n  data: Array<Record<string, string | number>>,\n  categoryKey: string,\n  variant: HorizontalBarChartVariant,\n  labelHeight: number,\n) => {\n  if (data.length === 0) {\n    return 0;\n  }\n\n  const height = data.length * getHeightOfGroup(data, categoryKey, variant, labelHeight);\n\n  if (data.length === 1) {\n    const minSingleDataHeight = 80; // Minimum height for single data points\n    return Math.max(height, minSingleDataHeight);\n  }\n  return height;\n};\n\n/**\n * This function returns the padding for the chart, used for the padding of the chart container.\n * @param data - The data to be displayed in the chart.\n * @param categoryKey - The key of the category to be displayed in the chart.\n * @param containerHeight - The height of the container of the chart.\n * @param variant - The variant of the chart.\n * @param labelHeight - The height of the category label.\n */\nconst getPadding = (\n  data: Array<Record<string, string | number>>,\n  categoryKey: string,\n  containerHeight: number,\n  variant: HorizontalBarChartVariant,\n  labelHeight: number,\n) => {\n  const chartHeight = getHeightOfData(data, categoryKey, variant, labelHeight);\n  const paddingValue = containerHeight - chartHeight;\n\n  if (paddingValue < 0) {\n    // If chart content is taller than container, no padding\n    return {\n      top: 10,\n      bottom: 10,\n    };\n  } else {\n    return {\n      top: paddingValue / 2,\n      bottom: paddingValue / 2,\n    };\n  }\n};\n\n/**\n * This function returns the height of each group/category.\n * @param data - The data to be displayed in the chart.\n * @param categoryKey - The key of the category to be displayed in the chart.\n * @param variant - The variant of the chart.\n * @param labelHeight - The height of the category label.\n */\nconst getHeightOfGroup = (\n  data: Array<Record<string, string | number>>,\n  categoryKey: string,\n  variant: HorizontalBarChartVariant,\n  labelHeight: number,\n) => {\n  if (data.length === 0) return 200; // Fallback\n\n  // Get the number of data keys (excluding categoryKey)\n  const dataKeys = getDataKeys(data, categoryKey);\n  const PADDING = 16;\n\n  if (variant === \"stacked\") {\n    // For stacked: each category is one stack\n    return BAR_HEIGHT + labelHeight + PADDING;\n  } else {\n    // For grouped: each category contains multiple bars\n    const seriesPerCategory = dataKeys.length;\n    return seriesPerCategory * (BAR_HEIGHT + BAR_GAP) - BAR_GAP + labelHeight + PADDING;\n  }\n};\n\n/**\n * This function returns the snap positions for the chart, used for the snap positions of the chart.\n * @param data - The data to be displayed in the chart.\n * @param categoryKey - The key of the category to be displayed in the chart.\n * @param variant - The variant of the chart.\n * @param labelHeight - The height of the category label.\n * @returns The snap positions for the chart.\n */\nconst getSnapPositions = (\n  data: Array<Record<string, string | number>>,\n  categoryKey: string,\n  variant: HorizontalBarChartVariant,\n  labelHeight: number,\n): number[] => {\n  if (data.length === 0) return [0];\n\n  const positions = [0]; // Start position\n  const groupHeightValue = getHeightOfGroup(data, categoryKey, variant, labelHeight);\n\n  // Calculate all valid snap positions based on groups\n  for (let i = 1; i < data.length; i++) {\n    positions.push(i * groupHeightValue);\n  }\n\n  return positions;\n};\n\nexport { getHeightOfData, getHeightOfGroup, getPadding, getSnapPositions };\n","import clsx from \"clsx\";\nimport React, { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { Bar, BarChart as RechartsBarChart, XAxis, YAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { useTheme } from \"../../ThemeProvider\";\nimport { ChartConfig, ChartContainer, ChartTooltip } from \"../Charts\";\nimport { SideBarChartData, SideBarTooltipProvider } from \"../context/SideBarTooltipContext\";\nimport { useExportChartData, useTransformedKeys } from \"../hooks\";\nimport { useHorizontalBarLabelHeight } from \"../hooks/useMaxLabelHeight\";\nimport {\n  CustomTooltipContent,\n  DefaultLegend,\n  SideBarTooltip,\n  SVGXAxisTick,\n  verticalCartesianGrid,\n  YAxisTick,\n} from \"../shared\";\nimport { ScrollButtonsVertical } from \"../shared/ScrollButtonsVertical\";\n\nimport { type LegendItem } from \"../types/Legend\";\nimport { useChartPalette, type PaletteName } from \"../utils/PalletUtils\";\n\nimport { LabelTooltipProvider } from \"../shared/LabelTooltip/LabelTooltip\";\nimport {\n  findNearestSnapPosition,\n  getBarStackInfo,\n  getRadiusArray,\n} from \"../utils/BarCharts/BarChartsUtils\";\nimport {\n  get2dChartConfig,\n  getColorForDataKey,\n  getDataKeys,\n  getLegendItems,\n} from \"../utils/dataUtils\";\nimport { numberTickFormatter } from \"../utils/styleUtils\";\nimport { CustomBarShape } from \"./components/CustomBarShape\";\nimport { useMaxCategoryLabelWidth } from \"./hooks/useMaxCategoryLabelWidth\";\nimport { HorizontalBarChartData, HorizontalBarChartVariant } from \"./types\";\nimport {\n  BAR_GAP,\n  BAR_HEIGHT,\n  getHeightOfData,\n  getPadding,\n  getSnapPositions,\n} from \"./utils/HorizontalBarChartUtils\";\n\n// Type for onClick event\ntype HorizontalBarChartOnClick = React.ComponentProps<typeof RechartsBarChart>[\"onClick\"];\ntype HorizontalBarClickData = Parameters<NonNullable<HorizontalBarChartOnClick>>[0];\n\nexport interface HorizontalBarChartProps<T extends HorizontalBarChartData> {\n  data: T;\n  categoryKey: keyof T[number];\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: HorizontalBarChartVariant;\n  grid?: boolean;\n  radius?: number;\n  icons?: Partial<Record<keyof T[number], React.ComponentType>>;\n  isAnimationActive?: boolean;\n  showXAxis?: boolean;\n  xAxisLabel?: React.ReactNode;\n  yAxisLabel?: React.ReactNode;\n  legend?: boolean;\n  className?: string;\n  height?: number;\n  width?: number;\n}\n\nconst X_AXIS_HEIGHT = 40; // Height of X-axis chart when shown\nconst BAR_CATEGORY_GAP = \"20%\"; // Gap between categories\nconst BAR_INTERNAL_LINE_WIDTH = 1;\nconst BAR_RADIUS = 4;\n\nconst HorizontalBarChartComponent = <T extends HorizontalBarChartData>({\n  data,\n  categoryKey,\n  theme = \"ocean\",\n  customPalette,\n  variant = \"grouped\",\n  grid = true,\n  icons = {},\n  radius = BAR_RADIUS,\n  isAnimationActive = false,\n  showXAxis = true,\n  xAxisLabel,\n  yAxisLabel,\n  legend = true,\n  className,\n  height,\n  width,\n}: HorizontalBarChartProps<T>) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const maxCategoryLabelWidth = useMaxCategoryLabelWidth(data, categoryKey as string);\n\n  const chartContainerRef = useRef<HTMLDivElement>(null);\n  const mainContainerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n  const [canScrollUp, setCanScrollUp] = useState(false);\n  const [canScrollDown, setCanScrollDown] = useState(false);\n  const [hoveredCategory, setHoveredCategory] = useState<string | number | null>(null);\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n  const [isSideBarTooltipOpen, setIsSideBarTooltipOpen] = useState(false);\n  const [sideBarTooltipData, setSideBarTooltipData] = useState<SideBarChartData>({\n    title: \"\",\n    values: [],\n  });\n\n  // Calculate chart width for internal calculations (legend, xAxis, etc.)\n  const effectiveWidth = useMemo(() => {\n    return width ?? containerWidth;\n  }, [width, containerWidth]);\n\n  // Calculate label height for better group height calculation\n  // Use chart width for label height calculation since labels span full width\n  const labelHeight = useHorizontalBarLabelHeight(data, categoryKey as string, effectiveWidth);\n\n  const dataKeys = useMemo(() => {\n    return getDataKeys(data, categoryKey as string);\n  }, [data, categoryKey]);\n\n  const transformedKeys = useTransformedKeys(dataKeys);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"barChartPalette\",\n    dataLength: dataKeys.length,\n  });\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig(dataKeys, colors, transformedKeys, undefined, icons);\n  }, [dataKeys, icons, colors, transformedKeys]);\n\n  // Use provided height or observed height\n  const effectiveHeight = useMemo(() => {\n    return height ?? 296 + X_AXIS_HEIGHT;\n  }, [height]);\n\n  // Calculate effective container height (excluding X-axis)\n  const effectiveContainerHeight = useMemo(() => {\n    const xAxisHeight = showXAxis ? X_AXIS_HEIGHT : 0;\n    return Math.max(0, effectiveHeight - xAxisHeight);\n  }, [effectiveHeight, showXAxis]);\n\n  const padding = useMemo(() => {\n    return getPadding(data, categoryKey as string, effectiveContainerHeight, variant, labelHeight);\n  }, [data, categoryKey, effectiveContainerHeight, variant, labelHeight]);\n\n  const dataHeight = useMemo(() => {\n    return getHeightOfData(data, categoryKey as string, variant, labelHeight);\n  }, [data, categoryKey, variant, labelHeight]);\n\n  // Calculate snap positions for proper group alignment\n  const snapPositions = useMemo(() => {\n    return getSnapPositions(data, categoryKey as string, variant, labelHeight);\n  }, [data, categoryKey, variant, labelHeight]);\n\n  // Check scroll boundaries\n  const updateScrollState = useCallback(() => {\n    if (mainContainerRef.current) {\n      const { scrollTop, scrollHeight, clientHeight } = mainContainerRef.current;\n      setCanScrollUp(scrollTop > 0);\n      setCanScrollDown(scrollTop < scrollHeight - clientHeight - 1);\n    }\n  }, []);\n\n  const scrollUp = useCallback(() => {\n    if (mainContainerRef.current) {\n      const currentScroll = mainContainerRef.current.scrollTop;\n      const targetIndex = findNearestSnapPosition(snapPositions, currentScroll, \"up\");\n      const targetPosition = snapPositions[targetIndex] ?? 0;\n\n      mainContainerRef.current.scrollTo({\n        top: targetPosition,\n        behavior: \"smooth\",\n      });\n    }\n  }, [snapPositions]);\n\n  const scrollDown = useCallback(() => {\n    if (mainContainerRef.current) {\n      const currentScroll = mainContainerRef.current.scrollTop;\n      const targetIndex = findNearestSnapPosition(snapPositions, currentScroll, \"down\");\n      const targetPosition = snapPositions[targetIndex] ?? 0;\n\n      mainContainerRef.current.scrollTo({\n        top: targetPosition,\n        behavior: \"smooth\",\n      });\n    }\n  }, [snapPositions]);\n\n  useEffect(() => {\n    // Set up ResizeObserver if height or width is not provided\n    if (!chartContainerRef.current) {\n      return () => {};\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      for (const entry of entries) {\n        if (!width) {\n          setContainerWidth(entry.contentRect.width);\n        }\n      }\n    });\n\n    resizeObserver.observe(chartContainerRef.current);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [height, width]);\n\n  // Update scroll state when container dimensions or data height changes\n  useEffect(() => {\n    updateScrollState();\n  }, [effectiveContainerHeight, dataHeight, containerWidth, updateScrollState]);\n\n  useEffect(() => {\n    setIsSideBarTooltipOpen(false);\n    setIsLegendExpanded(false);\n  }, [dataKeys]);\n\n  // Add scroll event listener to update button states\n  useEffect(() => {\n    const mainContainer = mainContainerRef.current;\n    if (!mainContainer) return;\n\n    const handleScroll = () => {\n      updateScrollState();\n    };\n\n    mainContainer.addEventListener(\"scroll\", handleScroll);\n    return () => {\n      mainContainer.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, [updateScrollState]);\n\n  // Memoize legend items creation\n  const legendItems: LegendItem[] = useMemo(() => {\n    return getLegendItems(dataKeys, colors, icons);\n  }, [dataKeys, colors, icons]);\n\n  const exportData = useExportChartData({\n    type: \"bar\",\n    data,\n    categoryKey: categoryKey as string,\n    dataKeys,\n    colors,\n    legend,\n    xAxisLabel,\n    yAxisLabel,\n    extraOptions: {\n      barDir: \"bar\",\n    },\n  });\n\n  const id = useId();\n\n  const xAxis = useMemo(() => {\n    if (!showXAxis) {\n      return null;\n    }\n    return (\n      <div className=\"openui-horizontal-bar-chart-x-axis-container\">\n        {/* X-axis only chart - synchronized with main chart */}\n        <ChartContainer\n          config={chartConfig}\n          style={{ width: \"100%\", height: X_AXIS_HEIGHT }}\n          rechartsProps={{\n            height: X_AXIS_HEIGHT,\n          }}\n        >\n          <RechartsBarChart\n            key={`x-axis-horizontal-bar-chart-${id}`}\n            data={data}\n            layout=\"vertical\"\n            margin={{\n              top: 0,\n              bottom: 0,\n              left: 5,\n              right: 2,\n            }}\n            stackOffset=\"sign\"\n          >\n            <XAxis\n              type=\"number\"\n              height={X_AXIS_HEIGHT}\n              tickLine={false}\n              axisLine={false}\n              tickFormatter={numberTickFormatter}\n              tick={<SVGXAxisTick />}\n            />\n            {/* Invisible bars to maintain scale synchronization */}\n            {dataKeys.map((key) => {\n              return (\n                <Bar\n                  key={`x-axis-horizontal-bar-chart-${key}`}\n                  dataKey={key}\n                  fill=\"transparent\"\n                  stackId={variant === \"stacked\" ? \"a\" : undefined}\n                  isAnimationActive={false}\n                  maxBarSize={0}\n                />\n              );\n            })}\n          </RechartsBarChart>\n        </ChartContainer>\n      </div>\n    );\n  }, [showXAxis, chartConfig, data, dataKeys, variant, id]);\n\n  // Handle mouse events for group hovering\n  const handleChartMouseMove = useCallback((state: any) => {\n    if (state && state.activeLabel !== undefined) {\n      setHoveredCategory(state.activeLabel);\n    }\n  }, []);\n\n  const handleChartMouseLeave = useCallback(() => {\n    setHoveredCategory(null);\n  }, []);\n\n  const { mode } = useTheme();\n\n  const barInternalLineColor = useMemo(() => {\n    if (mode === \"light\") {\n      return \"rgba(255, 255, 255, 0.3)\";\n    }\n    return \"rgba(0, 0, 0, 0.3)\";\n  }, [mode]);\n\n  const onBarsClick = useCallback(\n    (data: HorizontalBarClickData) => {\n      if (data?.activePayload?.length && data.activePayload.length > 10) {\n        setIsSideBarTooltipOpen(true);\n        setSideBarTooltipData({\n          title: data.activeLabel as string,\n          values: data.activePayload.map((payload) => ({\n            value: payload.value as number,\n            label: payload.name || payload.dataKey,\n            color: getColorForDataKey(payload.dataKey, dataKeys, colors),\n          })),\n        });\n      }\n    },\n    [dataKeys, colors],\n  );\n\n  const setLabelWidth = useCallback(() => {}, []);\n\n  return (\n    <LabelTooltipProvider>\n      <SideBarTooltipProvider\n        isSideBarTooltipOpen={isSideBarTooltipOpen}\n        setIsSideBarTooltipOpen={setIsSideBarTooltipOpen}\n        data={sideBarTooltipData}\n        setData={setSideBarTooltipData}\n      >\n        <div\n          className={clsx(\"openui-horizontal-bar-chart-container\", className)}\n          data-openui-chart={exportData}\n        >\n          <div\n            className=\"openui-horizontal-bar-chart-container-inner-wrapper\"\n            style={{\n              height: height ? `${height}px` : effectiveHeight,\n            }}\n          >\n            <div className=\"openui-horizontal-bar-chart-container-inner\" ref={chartContainerRef}>\n              <div className=\"openui-horizontal-bar-chart-main-container\" ref={mainContainerRef}>\n                <ChartContainer\n                  config={chartConfig}\n                  style={{ height: dataHeight, minHeight: \"100%\", width: \"100%\" }}\n                >\n                  <RechartsBarChart\n                    accessibilityLayer\n                    key={`horizontal-bar-chart-${id}`}\n                    data={data}\n                    layout=\"vertical\"\n                    onClick={onBarsClick}\n                    onMouseMove={handleChartMouseMove}\n                    onMouseLeave={handleChartMouseLeave}\n                    barGap={BAR_GAP}\n                    barCategoryGap={BAR_CATEGORY_GAP}\n                    margin={{\n                      top: 0,\n                      bottom: 0,\n                      left: 2,\n                      right: 2,\n                    }}\n                    stackOffset=\"sign\"\n                  >\n                    {grid && verticalCartesianGrid()}\n                    {/* this x axis is not visible but is needed for the chart to work */}\n                    <XAxis type=\"number\" tickLine={false} axisLine={false} hide />\n                    <YAxis\n                      type=\"category\"\n                      dataKey={categoryKey as string}\n                      tickLine={false}\n                      axisLine={false}\n                      width={maxCategoryLabelWidth}\n                      tick={<YAxisTick setLabelWidth={setLabelWidth} />}\n                      interval={0}\n                      // gives the padding on the 2 sides see the function for reference\n                      padding={padding}\n                      hide\n                    />\n\n                    <ChartTooltip\n                      cursor={{\n                        fill: \"var(--openui-highlight)\",\n                        stroke: \"var(--openui-stroke-default)\",\n                        opacity: 1,\n                        strokeWidth: 1,\n                      }}\n                      content={<CustomTooltipContent parentRef={mainContainerRef} />}\n                      offset={15}\n                    />\n\n                    {dataKeys.map((key, index) => {\n                      const transformedKey = transformedKeys[key];\n                      const color = `var(--color-${transformedKey})`;\n\n                      return (\n                        <Bar\n                          key={`main-${key}`}\n                          dataKey={key}\n                          fill={color}\n                          stackId={variant === \"stacked\" ? \"a\" : undefined}\n                          isAnimationActive={isAnimationActive}\n                          maxBarSize={BAR_HEIGHT}\n                          barSize={BAR_HEIGHT}\n                          shape={(props: any) => {\n                            const { payload, value, dataKey } = props;\n\n                            const { isNegative, isFirstInStack, isLastInStack } = getBarStackInfo(\n                              variant,\n                              value,\n                              dataKey,\n                              payload,\n                              dataKeys,\n                            );\n\n                            const customRadius = getRadiusArray(\n                              variant,\n                              radius,\n                              \"horizontal\",\n                              isFirstInStack,\n                              isLastInStack,\n                              isNegative,\n                            );\n\n                            return (\n                              <CustomBarShape\n                                {...props}\n                                radius={customRadius}\n                                index={index}\n                                categoryKey={categoryKey as string}\n                                effectiveWidth={effectiveWidth}\n                                labelHeight={labelHeight}\n                                barInternalLineColor={barInternalLineColor}\n                                internalLineWidth={BAR_INTERNAL_LINE_WIDTH}\n                                hoveredCategory={hoveredCategory}\n                                variant={variant}\n                              />\n                            );\n                          }}\n                        />\n                      );\n                    })}\n                  </RechartsBarChart>\n                </ChartContainer>\n              </div>\n              {/* X-axis of the chart */}\n              {xAxis}\n            </div>\n            {/* if the data height is greater than the effective height, then show the scroll buttons */}\n            <ScrollButtonsVertical\n              dataHeight={dataHeight}\n              effectiveHeight={effectiveContainerHeight}\n              canScrollUp={canScrollUp}\n              canScrollDown={canScrollDown}\n              isSideBarTooltipOpen={isSideBarTooltipOpen}\n              onScrollUp={scrollUp}\n              onScrollDown={scrollDown}\n            />\n            {isSideBarTooltipOpen && <SideBarTooltip height={effectiveHeight} />}\n          </div>\n          {legend && (\n            <DefaultLegend\n              items={legendItems}\n              yAxisLabel={yAxisLabel}\n              xAxisLabel={xAxisLabel}\n              containerWidth={effectiveWidth}\n              isExpanded={isLegendExpanded}\n              setIsExpanded={setIsLegendExpanded}\n            />\n          )}\n        </div>\n      </SideBarTooltipProvider>\n    </LabelTooltipProvider>\n  );\n};\n\n// Added React.memo for performance optimization to avoid unnecessary re-renders\nexport const HorizontalBarChart = React.memo(\n  HorizontalBarChartComponent,\n) as typeof HorizontalBarChartComponent;\n","import clsx from \"clsx\";\nimport React, { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { Line, LineChart as RechartsLineChart, XAxis, YAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { ChartConfig, ChartContainer, ChartTooltip } from \"../Charts\";\nimport { SideBarChartData, SideBarTooltipProvider } from \"../context/SideBarTooltipContext\";\nimport {\n  useExportChartData,\n  useMaxLabelHeight,\n  useTransformedKeys,\n  useYAxisLabelWidth,\n} from \"../hooks\";\nimport {\n  ActiveDot,\n  cartesianGrid,\n  CustomTooltipContent,\n  DefaultLegend,\n  ScrollButtonsHorizontal,\n  SideBarTooltip,\n  XAxisTick,\n  YAxisTick,\n} from \"../shared\";\nimport { LabelTooltipProvider } from \"../shared/LabelTooltip/LabelTooltip\";\nimport { LegendItem, XAxisTickVariant } from \"../types\";\nimport {\n  findNearestSnapPosition,\n  getSnapPositions,\n  getWidthOfData,\n  getWidthOfGroup,\n} from \"../utils/AreaAndLine/AreaAndLineUtils\";\nimport { getLineType } from \"../utils/AreaAndLine/common\";\nimport { PaletteName, useChartPalette } from \"../utils/PalletUtils\";\nimport {\n  get2dChartConfig,\n  getColorForDataKey,\n  getDataKeys,\n  getLegendItems,\n} from \"../utils/dataUtils\";\nimport { LineChartData, LineChartVariant } from \"./types\";\n\ntype LineChartOnClick = React.ComponentProps<typeof RechartsLineChart>[\"onClick\"];\ntype LineClickData = Parameters<NonNullable<LineChartOnClick>>[0];\n\nexport interface LineChartProps<T extends LineChartData> {\n  data: T;\n  categoryKey: keyof T[number];\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: LineChartVariant;\n  tickVariant?: XAxisTickVariant;\n  grid?: boolean;\n  legend?: boolean;\n  icons?: Partial<Record<keyof T[number], React.ComponentType>>;\n  isAnimationActive?: boolean;\n  showYAxis?: boolean;\n  xAxisLabel?: React.ReactNode;\n  yAxisLabel?: React.ReactNode;\n  className?: string;\n  height?: number;\n  width?: number;\n  strokeWidth?: number;\n}\n\nconst X_AXIS_PADDING = 36;\nconst CHART_CONTAINER_BOTTOM_MARGIN = 10;\n\nexport const LineChart = <T extends LineChartData>({\n  data,\n  categoryKey,\n  theme = \"ocean\",\n  customPalette,\n  variant: lineChartVariant = \"natural\",\n  tickVariant = \"multiLine\",\n  grid = true,\n  icons = {},\n  isAnimationActive = false,\n  showYAxis = true,\n  xAxisLabel,\n  yAxisLabel,\n  legend = true,\n  className,\n  height,\n  width,\n  strokeWidth = 2,\n}: LineChartProps<T>) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const dataKeys = useMemo(() => {\n    return getDataKeys(data, categoryKey as string);\n  }, [data, categoryKey]);\n\n  const variant = getLineType(lineChartVariant);\n\n  const { yAxisWidth, setLabelWidth } = useYAxisLabelWidth(data, dataKeys);\n\n  const widthOfGroup = useMemo(() => {\n    return getWidthOfGroup(data);\n  }, [data]);\n\n  const maxLabelHeight = useMaxLabelHeight(data, categoryKey as string, tickVariant, widthOfGroup);\n\n  const transformedKeys = useTransformedKeys(dataKeys);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"lineChartPalette\",\n    dataLength: dataKeys.length,\n  });\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig(dataKeys, colors, transformedKeys, undefined, icons);\n  }, [dataKeys, icons, colors, transformedKeys]);\n\n  const chartContainerRef = useRef<HTMLDivElement>(null);\n  const mainContainerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n  const [canScrollLeft, setCanScrollLeft] = useState(false);\n  const [canScrollRight, setCanScrollRight] = useState(false);\n  const [isSideBarTooltipOpen, setIsSideBarTooltipOpen] = useState(false);\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n  const [sideBarTooltipData, setSideBarTooltipData] = useState<SideBarChartData>({\n    title: \"\",\n    values: [],\n  });\n\n  // Use provided width or observed width\n  const effectiveWidth = useMemo(() => {\n    return width ?? containerWidth;\n  }, [width, containerWidth]);\n\n  const effectiveContainerWidth = useMemo(() => {\n    const dynamicYAxisWidth = showYAxis ? yAxisWidth : 0;\n    return Math.max(0, effectiveWidth - dynamicYAxisWidth - 40); // -40 because we are giving 20px padding in xAxis on each side\n  }, [effectiveWidth, showYAxis, yAxisWidth]);\n\n  const dataWidth = useMemo(() => {\n    return getWidthOfData(data, effectiveContainerWidth);\n  }, [data, effectiveContainerWidth]);\n\n  // Calculate snap positions for proper scrolling alignment\n  const snapPositions = useMemo(() => {\n    return getSnapPositions(data);\n  }, [data]);\n\n  const chartHeight = useMemo(() => {\n    return height ?? 296 + maxLabelHeight;\n  }, [height, maxLabelHeight]);\n\n  // Check scroll boundaries\n  const updateScrollState = useCallback(() => {\n    if (mainContainerRef.current) {\n      const { scrollLeft, scrollWidth, clientWidth } = mainContainerRef.current;\n      setCanScrollLeft(scrollLeft > 0);\n      setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 1); // -1 for floating point precision\n    }\n  }, []);\n\n  const scrollLeft = useCallback(() => {\n    if (mainContainerRef.current) {\n      const currentScroll = mainContainerRef.current.scrollLeft;\n      const targetIndex = findNearestSnapPosition(snapPositions, currentScroll, \"left\");\n      const targetPosition = snapPositions[targetIndex] ?? 0;\n\n      mainContainerRef.current.scrollTo({\n        left: targetPosition,\n        behavior: \"smooth\",\n      });\n    }\n  }, [snapPositions]);\n\n  const scrollRight = useCallback(() => {\n    if (mainContainerRef.current) {\n      const currentScroll = mainContainerRef.current.scrollLeft;\n      const targetIndex = findNearestSnapPosition(snapPositions, currentScroll, \"right\");\n      const targetPosition = snapPositions[targetIndex] ?? 0;\n\n      mainContainerRef.current.scrollTo({\n        left: targetPosition,\n        behavior: \"smooth\",\n      });\n    }\n  }, [snapPositions]);\n\n  useEffect(() => {\n    // Only set up ResizeObserver if width is not provided\n    if (width || !chartContainerRef.current) {\n      return () => {};\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      // there is only one entry in the entries array because we are observing the chart container\n      for (const entry of entries) {\n        setContainerWidth(entry.contentRect.width);\n      }\n    });\n\n    resizeObserver.observe(chartContainerRef.current);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [width]);\n\n  // Update scroll state when container width or data width changes\n  useEffect(() => {\n    updateScrollState();\n  }, [effectiveWidth, dataWidth, updateScrollState]);\n\n  useEffect(() => {\n    setIsSideBarTooltipOpen(false);\n    setIsLegendExpanded(false);\n  }, [dataKeys]);\n\n  // Add scroll event listener to update button states\n  useEffect(() => {\n    const mainContainer = mainContainerRef.current;\n    if (!mainContainer) return;\n\n    const handleScroll = () => {\n      updateScrollState();\n    };\n\n    mainContainer.addEventListener(\"scroll\", handleScroll);\n    return () => {\n      mainContainer.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, [updateScrollState]);\n\n  const legendItems: LegendItem[] = useMemo(() => {\n    return getLegendItems(dataKeys, colors, icons);\n  }, [dataKeys, colors, icons]);\n\n  const exportData = useExportChartData({\n    type: \"line\",\n    data,\n    categoryKey: categoryKey as string,\n    dataKeys,\n    colors,\n    legend,\n    xAxisLabel,\n    yAxisLabel,\n    extraOptions: {\n      lineSize: strokeWidth,\n    },\n  });\n\n  const id = useId();\n\n  const onLineClick = useCallback(\n    (data: LineClickData) => {\n      if (data?.activePayload?.length && data.activePayload.length > 10) {\n        setIsSideBarTooltipOpen(true);\n        setSideBarTooltipData({\n          title: data.activeLabel as string,\n          values: data.activePayload.map((payload) => ({\n            value: payload.value as number,\n            label: payload.name || payload.dataKey,\n            color: getColorForDataKey(payload.dataKey, dataKeys, colors),\n          })),\n        });\n      }\n    },\n    [dataKeys, colors],\n  );\n\n  const yAxis = useMemo(() => {\n    if (!showYAxis) {\n      return null;\n    }\n    return (\n      <div className=\"openui-line-chart-y-axis-container\">\n        {/* Y-axis only chart - synchronized with main chart */}\n        <RechartsLineChart\n          key={`y-axis-chart-${id}`}\n          width={yAxisWidth}\n          height={chartHeight}\n          data={data}\n          margin={{\n            top: 20,\n            bottom: maxLabelHeight + CHART_CONTAINER_BOTTOM_MARGIN, // this is required for to give space for x-axis\n            left: 0,\n            right: 0,\n          }}\n          onClick={onLineClick}\n        >\n          <YAxis\n            width={yAxisWidth}\n            tickLine={false}\n            axisLine={false}\n            tick={<YAxisTick setLabelWidth={setLabelWidth} />}\n          />\n          {/* Invisible lines to maintain scale synchronization */}\n          {dataKeys.map((key) => {\n            return (\n              <Line\n                key={`y-axis-${key}`}\n                dataKey={key}\n                type={variant}\n                stroke=\"transparent\"\n                strokeWidth={0}\n                dot={false}\n                activeDot={false}\n                isAnimationActive={isAnimationActive}\n              />\n            );\n          })}\n        </RechartsLineChart>\n      </div>\n    );\n  }, [\n    showYAxis,\n    id,\n    chartHeight,\n    data,\n    onLineClick,\n    dataKeys,\n    variant,\n    isAnimationActive,\n    maxLabelHeight,\n    yAxisWidth,\n  ]);\n\n  return (\n    <LabelTooltipProvider>\n      <SideBarTooltipProvider\n        isSideBarTooltipOpen={isSideBarTooltipOpen}\n        setIsSideBarTooltipOpen={setIsSideBarTooltipOpen}\n        data={sideBarTooltipData}\n        setData={setSideBarTooltipData}\n      >\n        <div\n          className={clsx(\"openui-line-chart-container\", className)}\n          data-openui-chart={exportData}\n          style={{\n            width: width ? `${width}px` : undefined,\n          }}\n        >\n          <div className=\"openui-line-chart-container-inner\" ref={chartContainerRef}>\n            {/* Y-axis of the chart */}\n            {yAxis}\n            <div className=\"openui-line-chart-main-container\" ref={mainContainerRef}>\n              <ChartContainer\n                config={chartConfig}\n                style={{ width: dataWidth, minWidth: \"100%\", height: chartHeight }}\n                rechartsProps={{\n                  width: \"100%\",\n                  height: \"100%\",\n                  minHeight: 1,\n                  minWidth: 1,\n                  initialDimension: { width: 1, height: 1 },\n                }}\n              >\n                <RechartsLineChart\n                  accessibilityLayer\n                  key={`line-chart-${id}`}\n                  data={data}\n                  margin={{\n                    top: 20,\n                    bottom: CHART_CONTAINER_BOTTOM_MARGIN,\n                  }}\n                  onClick={onLineClick}\n                >\n                  {grid && cartesianGrid()}\n                  <XAxis\n                    dataKey={categoryKey as string}\n                    tickLine={false}\n                    axisLine={false}\n                    height={maxLabelHeight}\n                    textAnchor=\"middle\"\n                    interval={0}\n                    tick={\n                      <XAxisTick\n                        variant={tickVariant}\n                        widthOfGroup={widthOfGroup}\n                        labelHeight={maxLabelHeight}\n                      />\n                    }\n                    orientation=\"bottom\"\n                    padding={{\n                      left: X_AXIS_PADDING,\n                      right: X_AXIS_PADDING,\n                    }}\n                  />\n\n                  <ChartTooltip\n                    content={<CustomTooltipContent parentRef={mainContainerRef} />}\n                    offset={15}\n                  />\n\n                  {dataKeys.map((key) => {\n                    const transformedKey = transformedKeys[key];\n                    const color = `var(--color-${transformedKey})`;\n                    return (\n                      <Line\n                        key={`main-${key}`}\n                        dataKey={key}\n                        type={variant}\n                        stroke={color}\n                        strokeWidth={strokeWidth}\n                        dot={false}\n                        activeDot={<ActiveDot key={`active-dot-${key}-${id}`} />}\n                        isAnimationActive={isAnimationActive}\n                      />\n                    );\n                  })}\n                </RechartsLineChart>\n              </ChartContainer>\n            </div>\n            {isSideBarTooltipOpen && <SideBarTooltip height={chartHeight} />}\n          </div>\n          {/* if the data width is greater than the effective width, then show the scroll buttons */}\n          <ScrollButtonsHorizontal\n            dataWidth={dataWidth}\n            effectiveWidth={effectiveWidth}\n            canScrollLeft={canScrollLeft}\n            canScrollRight={canScrollRight}\n            isSideBarTooltipOpen={isSideBarTooltipOpen}\n            onScrollLeft={scrollLeft}\n            onScrollRight={scrollRight}\n          />\n          {legend && (\n            <DefaultLegend\n              items={legendItems}\n              yAxisLabel={yAxisLabel}\n              xAxisLabel={xAxisLabel}\n              containerWidth={effectiveWidth}\n              isExpanded={isLegendExpanded}\n              setIsExpanded={setIsLegendExpanded}\n            />\n          )}\n        </div>\n      </SideBarTooltipProvider>\n    </LabelTooltipProvider>\n  );\n};\n","import clsx from \"clsx\";\nimport React, { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { Line, LineChart as RechartsLineChart, XAxis, YAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { ChartConfig, ChartContainer, ChartTooltip } from \"../Charts\";\nimport { DEFAULT_X_AXIS_HEIGHT, X_AXIS_PADDING } from \"../constants\";\nimport { SideBarChartData, SideBarTooltipProvider } from \"../context/SideBarTooltipContext\";\nimport {\n  useAutoAngleCalculation,\n  useExportChartData,\n  useMaxLabelWidth,\n  useTransformedKeys,\n  useYAxisLabelWidth,\n} from \"../hooks\";\nimport { LineChartData, LineChartVariant } from \"../LineChart/types\";\nimport {\n  ActiveDot,\n  cartesianGrid,\n  CustomTooltipContent,\n  DefaultLegend,\n  SideBarTooltip,\n  SVGXAxisTick,\n  SVGXAxisTickVariant,\n  YAxisTick,\n} from \"../shared\";\nimport { LabelTooltipProvider } from \"../shared/LabelTooltip/LabelTooltip\";\nimport { LegendItem } from \"../types\";\nimport { getLineType } from \"../utils/AreaAndLine/common\";\nimport {\n  get2dChartConfig,\n  getColorForDataKey,\n  getDataKeys,\n  getLegendItems,\n} from \"../utils/dataUtils\";\nimport { PaletteName, useChartPalette } from \"../utils/PalletUtils\";\n\n// this a technic to get the type of the onClick event of the line chart\n// we need to do this because the onClick event type is not exported by recharts\ntype LineChartOnClick = React.ComponentProps<typeof RechartsLineChart>[\"onClick\"];\ntype LineClickData = Parameters<NonNullable<LineChartOnClick>>[0];\n\nexport interface LineChartCondensedProps<T extends LineChartData> {\n  data: T;\n  categoryKey: keyof T[number];\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: LineChartVariant;\n  tickVariant?: SVGXAxisTickVariant;\n  grid?: boolean;\n  icons?: Partial<Record<keyof T[number], React.ComponentType>>;\n  isAnimationActive?: boolean;\n  showYAxis?: boolean;\n  xAxisLabel?: React.ReactNode;\n  yAxisLabel?: React.ReactNode;\n  legend?: boolean;\n  className?: string;\n  height?: number;\n  width?: number;\n  strokeWidth?: number;\n}\n\nconst CHART_HEIGHT = 296;\nconst CHART_CONTAINER_BOTTOM_MARGIN = 10;\n\nconst LineChartCondensedComponent = <T extends LineChartData>({\n  data,\n  categoryKey,\n  theme = \"ocean\",\n  customPalette,\n  variant: lineChartVariant = \"natural\",\n  tickVariant = \"singleLine\",\n  grid = true,\n  icons = {},\n  isAnimationActive = false,\n  showYAxis = true,\n  xAxisLabel,\n  yAxisLabel,\n  legend = true,\n  className,\n  height = CHART_HEIGHT,\n  width,\n  strokeWidth = 2,\n}: LineChartCondensedProps<T>) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const dataKeys = useMemo(() => {\n    return getDataKeys(data, categoryKey as string);\n  }, [data, categoryKey]);\n\n  const variant = getLineType(lineChartVariant);\n\n  const { yAxisWidth, setLabelWidth } = useYAxisLabelWidth(data, dataKeys);\n\n  const maxLabelWidth = useMaxLabelWidth(data, categoryKey as string);\n\n  const chartContainerRef = useRef<HTMLDivElement>(null);\n  const [chartContainerWidth, setChartContainerWidth] = useState<number>(0);\n\n  const widthOfData = useMemo(() => {\n    if (data.length === 0) {\n      return 0;\n    }\n    // Use passed width if available, otherwise use observed chartContainerWidth\n    const chartWidth = width ?? chartContainerWidth;\n    return chartWidth / data.length;\n  }, [width, chartContainerWidth, data]);\n\n  const { angle: calculatedAngle, height: xAxisHeight } = useAutoAngleCalculation(\n    maxLabelWidth,\n    tickVariant === \"angled\",\n    maxLabelWidth < 100 ? widthOfData : undefined,\n  );\n\n  const isAngled = useMemo(() => {\n    return calculatedAngle !== 0;\n  }, [calculatedAngle]);\n\n  const effectiveHeight = useMemo(() => {\n    if (tickVariant === \"angled\") {\n      return xAxisHeight + height;\n    }\n    return height + DEFAULT_X_AXIS_HEIGHT;\n  }, [height, xAxisHeight, tickVariant]);\n\n  const transformedKeys = useTransformedKeys(dataKeys);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"lineChartPalette\",\n    dataLength: dataKeys.length,\n  });\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig(dataKeys, colors, transformedKeys, undefined, icons);\n  }, [dataKeys, icons, colors, transformedKeys]);\n\n  const id = useId();\n\n  const exportData = useExportChartData({\n    type: \"line\",\n    data,\n    categoryKey: categoryKey as string,\n    dataKeys,\n    colors,\n    legend,\n    xAxisLabel,\n    yAxisLabel,\n    extraOptions: {\n      lineSize: strokeWidth,\n    },\n  });\n\n  const chartMargin = useMemo(\n    () => ({\n      top: 10,\n      right: 10,\n      bottom: CHART_CONTAINER_BOTTOM_MARGIN,\n      left: showYAxis ? 10 : 0,\n    }),\n    [showYAxis],\n  );\n\n  const onLineClick = useCallback(\n    (data: LineClickData) => {\n      if (data?.activePayload?.length && data.activePayload.length > 10) {\n        setIsSideBarTooltipOpen(true);\n        setSideBarTooltipData({\n          title: data.activeLabel as string,\n          values: data.activePayload.map((payload) => ({\n            value: payload.value as number,\n            label: payload.name || payload.dataKey,\n            color: getColorForDataKey(payload.dataKey, dataKeys, colors),\n          })),\n        });\n      }\n    },\n    [dataKeys, colors],\n  );\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n  const [isSideBarTooltipOpen, setIsSideBarTooltipOpen] = useState(false);\n  const [sideBarTooltipData, setSideBarTooltipData] = useState<SideBarChartData>({\n    title: \"\",\n    values: [],\n  });\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n\n  // Use provided width or observed width\n  const effectiveWidth = useMemo(() => {\n    return width ?? containerWidth;\n  }, [width, containerWidth]);\n\n  // Observe container width for legend\n  useEffect(() => {\n    // Only set up ResizeObserver if width is not provided\n    if (width || !containerRef.current || !chartContainerRef.current) {\n      return () => {};\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      // there is only one entry in the entries array because we are observing the chart container\n      for (const entry of entries) {\n        if (entry.target === containerRef.current) {\n          setContainerWidth(entry.contentRect.width);\n        }\n        if (entry.target === chartContainerRef.current) {\n          setChartContainerWidth(entry.contentRect.width);\n        }\n      }\n    });\n\n    resizeObserver.observe(containerRef.current);\n    resizeObserver.observe(chartContainerRef.current);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [width]);\n\n  useEffect(() => {\n    setIsLegendExpanded(false);\n  }, [dataKeys]);\n\n  // Memoize legend items creation\n  const legendItems: LegendItem[] = useMemo(() => {\n    if (!legend) {\n      return [];\n    }\n    return getLegendItems(dataKeys, colors, icons);\n  }, [dataKeys, colors, icons, legend]);\n\n  const yAxis = useMemo(() => {\n    if (!showYAxis) {\n      return null;\n    }\n    return (\n      <div className=\"openui-line-chart-condensed-y-axis-container\">\n        {/* Y-axis only chart - synchronized with main chart */}\n        <RechartsLineChart\n          key={`y-axis-line-chart-condensed-${id}`}\n          width={yAxisWidth}\n          height={effectiveHeight}\n          data={data}\n          margin={{\n            top: chartMargin.top,\n            bottom: xAxisHeight + chartMargin.bottom, // this is required to give space for x-axis\n            left: 0,\n            right: 0,\n          }}\n        >\n          <YAxis\n            width={yAxisWidth}\n            tickLine={false}\n            axisLine={false}\n            tick={<YAxisTick setLabelWidth={setLabelWidth} />}\n          />\n          {/* Invisible lines to maintain scale synchronization */}\n          {dataKeys.map((key) => {\n            return (\n              <Line\n                key={`yaxis-line-chart-condensed-${key}`}\n                dataKey={key}\n                stroke=\"transparent\"\n                strokeWidth={0}\n                dot={false}\n                isAnimationActive={false}\n              />\n            );\n          })}\n        </RechartsLineChart>\n      </div>\n    );\n  }, [\n    showYAxis,\n    effectiveHeight,\n    data,\n    dataKeys,\n    id,\n    yAxisWidth,\n    chartMargin,\n    xAxisHeight,\n    setLabelWidth,\n  ]);\n\n  return (\n    <LabelTooltipProvider>\n      <SideBarTooltipProvider\n        isSideBarTooltipOpen={isSideBarTooltipOpen}\n        setIsSideBarTooltipOpen={setIsSideBarTooltipOpen}\n        data={sideBarTooltipData}\n        setData={setSideBarTooltipData}\n      >\n        <div\n          className={clsx(\"openui-line-chart-condensed-container\", className)}\n          data-openui-chart={exportData}\n          style={{\n            width: width ? `${width}px` : undefined,\n          }}\n        >\n          {yAxisLabel && (\n            <div className=\"openui-line-chart-condensed-y-axis-label\">{yAxisLabel}</div>\n          )}\n          <div className=\"openui-line-chart-condensed-container-inner\" ref={containerRef}>\n            {/* Y-axis of the chart */}\n            {yAxis}\n            <div className=\"openui-line-chart-condensed\" ref={chartContainerRef}>\n              <ChartContainer\n                config={chartConfig}\n                style={{ width: \"100%\", height: effectiveHeight }}\n                rechartsProps={{\n                  width: \"100%\",\n                  height: \"100%\",\n                }}\n              >\n                <RechartsLineChart\n                  accessibilityLayer\n                  key={`line-chart-condensed-${id}`}\n                  data={data}\n                  margin={chartMargin}\n                  onClick={onLineClick}\n                >\n                  {grid && cartesianGrid()}\n\n                  <XAxis\n                    dataKey={categoryKey as string}\n                    tickLine={false}\n                    axisLine={false}\n                    textAnchor={isAngled ? \"end\" : \"middle\"}\n                    interval=\"preserveStartEnd\"\n                    minTickGap={5}\n                    height={xAxisHeight}\n                    tick={<SVGXAxisTick />}\n                    angle={calculatedAngle}\n                    orientation=\"bottom\"\n                    padding={{\n                      left: X_AXIS_PADDING,\n                      right: X_AXIS_PADDING,\n                    }}\n                  />\n                  {/* Y-axis is rendered in the separate synchronized chart */}\n\n                  <ChartTooltip\n                    content={<CustomTooltipContent parentRef={containerRef} />}\n                    offset={10}\n                  />\n\n                  {dataKeys.map((key) => {\n                    const transformedKey = transformedKeys[key];\n                    const color = `var(--color-${transformedKey})`;\n                    return (\n                      <Line\n                        key={`line-${key}`}\n                        dataKey={key}\n                        type={variant}\n                        stroke={color}\n                        strokeWidth={strokeWidth}\n                        dot={false}\n                        activeDot={<ActiveDot key={`active-dot-${key}-${id}`} />}\n                        isAnimationActive={isAnimationActive}\n                      />\n                    );\n                  })}\n                </RechartsLineChart>\n              </ChartContainer>\n            </div>\n            {isSideBarTooltipOpen && <SideBarTooltip height={effectiveHeight} />}\n          </div>\n          {xAxisLabel && (\n            <div className=\"openui-line-chart-condensed-x-axis-label\">{xAxisLabel}</div>\n          )}\n          {legend && (\n            <DefaultLegend\n              items={legendItems}\n              containerWidth={effectiveWidth}\n              isExpanded={isLegendExpanded}\n              setIsExpanded={setIsLegendExpanded}\n            />\n          )}\n        </div>\n      </SideBarTooltipProvider>\n    </LabelTooltipProvider>\n  );\n};\n\n// Added React.memo for performance optimization to avoid unnecessary re-renders\nexport const LineChartCondensed = React.memo(\n  LineChartCondensedComponent,\n) as typeof LineChartCondensedComponent;\n","// Common utility functions for Mini Area and Line charts\n// These functions are shared between MiniAreaChart and MiniLineChart components\n\nimport { MiniAreaChartData } from \"../../MiniAreaChart/types\";\nimport { MiniLineChartData } from \"../../MiniLineChart/types\";\n\n// Element spacing constant for both chart types\nexport const MINI_ELEMENT_SPACING: number = 20;\n\ntype ChartData = Array<{\n  value: number;\n  label: string;\n}>;\n\n// Common type for mini chart data - both area and line use the same structure\nexport type MiniChartData = MiniAreaChartData | MiniLineChartData;\n\n/**\n * Transforms mini chart data into a standardized format for rendering.\n * Handles both numeric values and objects with value/label properties.\n * Works for both MiniAreaChart and MiniLineChart components.\n *\n * @param data - The mini chart data array (can contain numbers or objects with value/label)\n * @returns An array of chart data objects with value and label properties\n */\nexport const transformDataForChart = (data: MiniChartData): ChartData => {\n  return data.map((item, index) => {\n    if (typeof item === \"number\") {\n      return { value: item, label: `Item ${index + 1}` };\n    } else {\n      return { value: item.value, label: item.label || `Item ${index + 1}` };\n    }\n  });\n};\n\n/**\n * Filters data to include only the most recent items that can fit within the container width.\n * This function ensures the chart displays the latest data when space is limited.\n * Works for both MiniAreaChart and MiniLineChart components.\n *\n * @param data - The complete mini chart data array\n * @param containerWidth - The total width of the container in pixels\n * @returns A filtered array containing only the most recent data items that fit in the container\n */\nexport const getRecentDataThatFits = (\n  data: MiniChartData,\n  containerWidth: number,\n): MiniChartData => {\n  if (containerWidth <= 0 || data.length === 0) {\n    return data;\n  }\n\n  // Calculate how many items can fit in the available space\n  const maxItems = Math.floor((containerWidth + 20) / MINI_ELEMENT_SPACING);\n  // +20 because the element spacing is between so if we have 2 element then its data 20px data\n  // so we need to add 20px to the container width to get the actual width of the data\n\n  // If all items fit, return all data\n  if (maxItems >= data.length) {\n    return data;\n  }\n\n  // Return the most recent items that fit\n  return data.slice(-maxItems);\n};\n\nexport const DATA_KEY = \"value\";\n","import clsx from \"clsx\";\nimport { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { Area, AreaChart as RechartsAreaChart, XAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { AreaChartVariant } from \"../AreaChart/types\";\nimport { ChartConfig, ChartContainer } from \"../Charts\";\nimport {\n  DATA_KEY,\n  getRecentDataThatFits,\n  transformDataForChart,\n} from \"../utils/AreaAndLine/MiniAreaAndLineUtils\";\nimport { getLineType } from \"../utils/AreaAndLine/common\";\nimport { useChartPalette, type PaletteName } from \"../utils/PalletUtils\";\nimport { get2dChartConfig } from \"../utils/dataUtils\";\nimport { MiniAreaChartData } from \"./types\";\n\nexport interface MiniAreaChartProps {\n  data: MiniAreaChartData;\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: AreaChartVariant;\n  opacity?: number;\n  isAnimationActive?: boolean;\n  onAreaClick?: (data: any) => void;\n  size?: number | string;\n  className?: string;\n  areaColor?: string;\n  useGradient?: boolean;\n}\n\nexport const MiniAreaChart = ({\n  data,\n  theme = \"ocean\",\n  customPalette,\n  variant: areaChartVariant = \"natural\",\n  opacity = 0.5,\n  isAnimationActive = false,\n  onAreaClick,\n  size = \"100%\",\n  className,\n  areaColor,\n  useGradient = true,\n}: MiniAreaChartProps) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n\n  const variant = getLineType(areaChartVariant);\n\n  useEffect(() => {\n    if (!containerRef.current) {\n      return () => {};\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      // there is only one entry in the entries array because we are only observing the chart container\n      for (const entry of entries) {\n        setContainerWidth(entry.contentRect.width);\n      }\n    });\n\n    resizeObserver.observe(containerRef.current);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, []);\n\n  // Get the most recent data that fits in the container\n  const filteredData = useMemo(() => {\n    return getRecentDataThatFits(data, containerWidth);\n  }, [data, containerWidth]);\n\n  // Transform the filtered data to a consistent format for recharts\n  const chartData = useMemo(() => {\n    return transformDataForChart(filteredData);\n  }, [filteredData]);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette: customPalette || (areaColor ? [areaColor] : undefined),\n    themePaletteName: \"areaChartPalette\",\n    dataLength: 1,\n  });\n\n  const transformedKeys = useMemo(() => ({ [DATA_KEY]: DATA_KEY }), []);\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig([DATA_KEY], colors, transformedKeys);\n  }, [colors, transformedKeys]);\n\n  const id = useId();\n\n  // Generate unique gradient ID to avoid conflicts when multiple charts are on the same page\n  const gradientId = useMemo(() => `miniAreaGradient-${id}`, [id]);\n  const color = `var(--color-${DATA_KEY})`;\n\n  return (\n    <ChartContainer\n      config={chartConfig}\n      style={{\n        width: size,\n        height: size,\n        aspectRatio: 1 / 1,\n        minHeight: 100,\n        minWidth: 100,\n      }}\n      rechartsProps={{\n        aspect: 1 / 1,\n      }}\n      onClick={onAreaClick}\n      ref={containerRef}\n      className={clsx(\"openui-charts-mini-area-chart-container\", className)}\n    >\n      <RechartsAreaChart\n        accessibilityLayer\n        data={chartData}\n        margin={{\n          top: 10,\n        }}\n      >\n        {useGradient && (\n          <defs>\n            <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n              <stop offset=\"5%\" stopColor={color} stopOpacity={0.6} />\n              <stop offset=\"95%\" stopColor={color} stopOpacity={0} />\n            </linearGradient>\n          </defs>\n        )}\n\n        <XAxis dataKey=\"label\" hide={true} />\n\n        <Area\n          dataKey={DATA_KEY}\n          type={variant}\n          stroke={color}\n          fill={useGradient ? `url(#${gradientId})` : color}\n          fillOpacity={useGradient ? 1 : opacity}\n          isAnimationActive={isAnimationActive}\n          strokeWidth={1.5}\n        />\n      </RechartsAreaChart>\n    </ChartContainer>\n  );\n};\n","import { type MiniBarChartData } from \"../types\";\n\nexport const MINI_BAR_WIDTH: number = 8;\nexport const MINI_ELEMENT_SPACING: number = 10;\n\nconst CONTAINER_HORIZONTAL_PADDING: number = 8; // 4px left + 4px right\n\n/**\n * Calculates the total width of the data.\n *\n * @param data - The mini bar chart data array\n * @returns The total width needed in pixels to display all data items\n */\nconst getWidthOfData = (data: MiniBarChartData) => {\n  return data.length * (MINI_ELEMENT_SPACING + MINI_BAR_WIDTH);\n};\n\n/**\n * Calculates the left and right padding for the chart container based on available space.\n * If the chart data exceeds the container width, no padding is applied.\n *\n * @param data - The mini bar chart data array\n * @param containerWidth - The total width of the container in pixels\n * @returns An object with left and right padding values in pixels\n */\nexport const getPadding = (data: MiniBarChartData, containerWidth: number) => {\n  const availableWidth = containerWidth - CONTAINER_HORIZONTAL_PADDING;\n  const chartWidth = getWidthOfData(data);\n  const paddingValue = availableWidth - chartWidth;\n\n  if (paddingValue < 0) {\n    return {\n      left: 0,\n      right: 0,\n    };\n  }\n  return {\n    left: paddingValue,\n    right: 0,\n  };\n};\n\n/**\n * Filters the data to include only the most recent items that can fit within the container width.\n * This function ensures the chart displays the latest data when space is limited.\n *\n * @param data - The complete mini bar chart data array\n * @param containerWidth - The total width of the container in pixels\n * @returns A filtered array containing only the most recent data items that fit in the container\n */\nexport const getRecentDataThatFits = (\n  data: MiniBarChartData,\n  containerWidth: number,\n): MiniBarChartData => {\n  if (containerWidth <= 0 || data.length === 0) {\n    return data;\n  }\n\n  // Subtract padding to get actual available width for chart content\n  const availableWidth = containerWidth - CONTAINER_HORIZONTAL_PADDING;\n\n  // Calculate how many items can fit in the available space\n  const itemWidth = MINI_BAR_WIDTH + MINI_ELEMENT_SPACING;\n  const maxItems = Math.floor(availableWidth / itemWidth);\n\n  // If all items fit, return all data\n  if (maxItems >= data.length) {\n    return data;\n  }\n\n  // Return the most recent items that fit\n  return data.slice(-maxItems);\n};\n\ntype ChartData = Array<{\n  value: number;\n  label: string;\n}>;\n\n/**\n * Transforms the mini bar chart data into a standardized format for rendering.\n * Handles both numeric values and objects with value/label properties.\n *\n * @param data - The mini bar chart data array (can contain numbers or objects with value/label)\n * @returns An array of chart data objects with value and label properties\n */\nexport const transformDataForChart = (data: MiniBarChartData): ChartData => {\n  return data.map((item, index) => {\n    if (typeof item === \"number\") {\n      return { value: item, label: `Item ${index + 1}` };\n    } else {\n      return { value: item.value, label: item.label || `Item ${index + 1}` };\n    }\n  });\n};\n\nexport const DATA_KEY = \"value\";\n","import clsx from \"clsx\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Bar, BarChart, XAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { useTheme } from \"../../ThemeProvider\";\nimport { ChartConfig, ChartContainer } from \"../Charts\";\nimport { LineInBarShape } from \"../shared\";\nimport { useChartPalette, type PaletteName } from \"../utils/PalletUtils\";\nimport { get2dChartConfig } from \"../utils/dataUtils\";\nimport { type MiniBarChartData } from \"./types\";\nimport {\n  DATA_KEY,\n  getPadding,\n  getRecentDataThatFits,\n  MINI_BAR_WIDTH,\n  transformDataForChart,\n} from \"./utils/miniBarChartUtils\";\n\nexport interface MiniBarChartProps {\n  data: MiniBarChartData;\n  theme?: PaletteName;\n  customPalette?: string[];\n  radius?: number;\n  isAnimationActive?: boolean;\n  onBarsClick?: (data: any) => void;\n  size?: number | string;\n  className?: string;\n  barColor?: string;\n}\n\nconst MINI_BAR_CHART_INNER_LINE_WIDTH = 1;\n\nexport const MiniBarChart = ({\n  data,\n  theme = \"ocean\",\n  customPalette,\n  radius = 1,\n  isAnimationActive = false,\n  onBarsClick,\n  size = \"100%\",\n  className,\n  barColor,\n}: MiniBarChartProps) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n\n  useEffect(() => {\n    if (!containerRef.current) {\n      return () => {};\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      // there is only one entry in the entries array because we are only observing the chart container\n      for (const entry of entries) {\n        setContainerWidth(entry.contentRect.width);\n      }\n    });\n\n    resizeObserver.observe(containerRef.current);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, []);\n\n  // Get the most recent data that fits in the container\n  const filteredData = useMemo(() => {\n    return getRecentDataThatFits(data, containerWidth);\n  }, [data, containerWidth]);\n\n  // Transform the filtered data to a consistent format for recharts\n  const chartData = useMemo(() => {\n    return transformDataForChart(filteredData);\n  }, [filteredData]);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette: customPalette || (barColor ? [barColor] : undefined),\n    themePaletteName: \"barChartPalette\",\n    dataLength: 1,\n  });\n\n  const transformedKeys = useMemo(() => ({ [DATA_KEY]: DATA_KEY }), []);\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig([DATA_KEY], colors, transformedKeys);\n  }, [colors, transformedKeys]);\n\n  const { mode } = useTheme();\n\n  const barInternalLineColor = useMemo(() => {\n    if (mode === \"light\") {\n      return \"rgba(255, 255, 255, 0.3)\";\n    }\n    return \"rgba(0, 0, 0, 0.3)\";\n  }, [mode]);\n\n  return (\n    <ChartContainer\n      config={chartConfig}\n      style={{\n        width: size,\n        height: size,\n        aspectRatio: 1 / 1,\n        minHeight: 100,\n        minWidth: 100,\n      }}\n      rechartsProps={{\n        aspect: 1 / 1,\n      }}\n      onClick={onBarsClick}\n      ref={containerRef}\n      className={clsx(\"openui-charts-mini-bar-chart-container\", className)}\n    >\n      <BarChart accessibilityLayer data={chartData}>\n        <XAxis hide={true} padding={getPadding(filteredData, containerWidth)} />\n        <Bar\n          dataKey={DATA_KEY}\n          fill={`var(--color-${DATA_KEY})`}\n          radius={[radius, radius, 0, 0]}\n          isAnimationActive={isAnimationActive}\n          maxBarSize={MINI_BAR_WIDTH}\n          barSize={MINI_BAR_WIDTH}\n          shape={\n            <LineInBarShape\n              internalLineWidth={MINI_BAR_CHART_INNER_LINE_WIDTH}\n              internalLineColor={barInternalLineColor}\n            />\n          }\n        />\n      </BarChart>\n    </ChartContainer>\n  );\n};\n","import clsx from \"clsx\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Line, LineChart as RechartsLineChart, XAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { ChartConfig, ChartContainer } from \"../Charts\";\nimport { LineChartVariant } from \"../LineChart/types\";\nimport {\n  DATA_KEY,\n  getRecentDataThatFits,\n  transformDataForChart,\n} from \"../utils/AreaAndLine/MiniAreaAndLineUtils\";\nimport { getLineType } from \"../utils/AreaAndLine/common\";\nimport { useChartPalette, type PaletteName } from \"../utils/PalletUtils\";\nimport { get2dChartConfig } from \"../utils/dataUtils\";\nimport { MiniLineChartData } from \"./types\";\n\nexport interface MiniLineChartProps {\n  data: MiniLineChartData;\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: LineChartVariant;\n  strokeWidth?: number;\n  isAnimationActive?: boolean;\n  onLineClick?: (data: any) => void;\n  size?: number | string;\n  className?: string;\n  lineColor?: string;\n}\n\nexport const MiniLineChart = ({\n  data,\n  theme = \"ocean\",\n  customPalette,\n  variant: lineChartVariant = \"natural\",\n  strokeWidth = 2,\n  isAnimationActive = true,\n  onLineClick,\n  size = \"100%\",\n  className,\n  lineColor,\n}: MiniLineChartProps) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n\n  const variant = getLineType(lineChartVariant);\n\n  useEffect(() => {\n    if (!containerRef.current) {\n      return () => {};\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      for (const entry of entries) {\n        setContainerWidth(entry.contentRect.width);\n      }\n    });\n\n    resizeObserver.observe(containerRef.current);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, []);\n\n  // Get the most recent data that fits in the container\n  const filteredData = useMemo(() => {\n    return getRecentDataThatFits(data, containerWidth);\n  }, [data, containerWidth]);\n\n  // Transform the filtered data to a consistent format for recharts\n  const chartData = useMemo(() => {\n    return transformDataForChart(filteredData);\n  }, [filteredData]);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette: customPalette || (lineColor ? [lineColor] : undefined),\n    themePaletteName: \"lineChartPalette\",\n    dataLength: 1,\n  });\n\n  const transformedKeys = useMemo(() => ({ [DATA_KEY]: DATA_KEY }), []);\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig([DATA_KEY], colors, transformedKeys);\n  }, [colors, transformedKeys]);\n\n  return (\n    <ChartContainer\n      config={chartConfig}\n      style={{\n        width: size,\n        height: size,\n        aspectRatio: 1 / 1,\n        minHeight: 100,\n        minWidth: 100,\n      }}\n      rechartsProps={{\n        aspect: 1 / 1,\n      }}\n      onClick={onLineClick}\n      ref={containerRef}\n      className={clsx(\"openui-charts-mini-line-chart-container\", className)}\n    >\n      <RechartsLineChart\n        accessibilityLayer\n        data={chartData}\n        margin={{\n          top: 10,\n        }}\n      >\n        <XAxis dataKey=\"label\" hide={true} />\n\n        <Line\n          dataKey={DATA_KEY}\n          type={variant}\n          stroke={`var(--color-${DATA_KEY})`}\n          strokeWidth={strokeWidth}\n          dot={false}\n          isAnimationActive={isAnimationActive}\n        />\n      </RechartsLineChart>\n    </ChartContainer>\n  );\n};\n","/**\n * Utility functions for pie charts\n */\nimport { useState } from \"react\";\nimport { PieChartData } from \"../types\";\n\nexport interface ChartDimensions {\n  outerRadius: number;\n  innerRadius: number;\n}\n\nexport interface TwoLevelChartDimensions extends ChartDimensions {\n  middleRadius: number;\n}\n\nexport interface HoverStyles {\n  opacity: number;\n  stroke: string;\n  strokeWidth: number;\n}\n\nexport interface ChartHoverHook {\n  activeIndex: number | null;\n  handleMouseEnter: (event: any, index: number) => void;\n  handleMouseLeave: () => void;\n}\n\nexport interface AnimationConfig {\n  isAnimationActive: boolean;\n  animationBegin: number;\n  animationDuration: number;\n  animationEasing: \"ease\" | \"ease-in\" | \"ease-out\" | \"ease-in-out\" | \"linear\";\n}\n\n// ==========================================\n// Core Calculation Utilities\n// ==========================================\n\n/**\n * Calculates the percentage value of a number relative to a total\n * @param value - The value to calculate percentage for\n * @param total - The total value to calculate percentage against\n * @returns The calculated percentage rounded to 2 decimal places\n */\nconst calculatePercentage = (value: number, total: number): number => {\n  if (total === 0) {\n    return 0;\n  }\n  return Number(((value / total) * 100).toFixed(2));\n};\n\n// ==========================================\n// Chart Dimension Calculations\n// ==========================================\n\n/**\n * Calculates dimensions for standard pie/donut charts\n * @param width - The container width\n * @param variant - The chart variant ('pie' or 'donut')\n * @returns Object containing outer and inner radius values\n */\nconst calculateChartDimensions = (width: number, variant: string): ChartDimensions => {\n  const baseRadiusPercentage = 0.45; // Prefer a larger base to better utilize available width\n  let outerRadius = Math.round(width * baseRadiusPercentage);\n\n  // Set minimum and maximum bounds for radius\n  outerRadius = Math.max(50, Math.min(outerRadius, width / 2 - 10)); // Ensure radius isn't too small or too large\n\n  // Calculate inner radius for donut variant - consistent ratio regardless of layout\n  let innerRadius = 0;\n  if (variant === \"donut\") {\n    innerRadius = Math.round(outerRadius * 0.6);\n  }\n\n  return { outerRadius, innerRadius };\n};\n\n/**\n * Calculates dimensions for two-level pie charts\n * @param width - The container width\n * @returns Object containing outer, middle, and inner radius values\n */\nconst calculateTwoLevelChartDimensions = (width: number): TwoLevelChartDimensions => {\n  const baseRadiusPercentage = 0.45; // Prefer a larger base to better utilize available width\n  let outerRadius = Math.round(width * baseRadiusPercentage);\n\n  // Set minimum and maximum bounds for radius\n  outerRadius = Math.max(50, Math.min(outerRadius, width / 2 - 10));\n\n  // Calculate middle radius (inner ring's outer boundary)\n  const middleRadius = Math.round(outerRadius * 0.9);\n\n  // Calculate inner radius - always has a value in two-level chart\n  const innerRadius = Math.round(middleRadius * 0.28);\n\n  return { outerRadius, middleRadius, innerRadius };\n};\n\n// ==========================================\n// Layout and Styling Utilities\n// ==========================================\n\n/**\n * Generates hover style properties for chart cells\n * @param index - The index of the current cell\n * @param activeIndex - The index of the currently hovered cell\n * @returns Object containing hover style properties\n */\nconst getHoverStyles = (index: number, activeIndex: number | null): HoverStyles => {\n  return {\n    opacity: activeIndex === null || activeIndex === index ? 1 : 0.5,\n    stroke: activeIndex === index ? \"#fff\" : \"none\",\n    strokeWidth: activeIndex === index ? 2 : 0,\n  };\n};\n\n// ==========================================\n// Data Transformation Utilities\n// ==========================================\n\n/**\n * Transforms data by adding percentage calculations\n * @param data - The input data array\n * @param dataKey - The key to use for value calculations\n * @returns Transformed data with added percentage and original value\n */\nconst transformDataWithPercentages = <T extends PieChartData>(\n  data: T,\n  dataKey: keyof T[number],\n) => {\n  const total = data.reduce((sum, item) => sum + Number(item[dataKey]), 0);\n  return data.map((item) => ({\n    ...item,\n    percentage: calculatePercentage(Number(item[dataKey as string]), total),\n    originalValue: item[dataKey as string],\n  }));\n};\n\n// ==========================================\n// Hover Effect Utilities\n// ==========================================\n\n/**\n * Custom hook for managing chart hover effects\n * @returns Object containing hover state and handlers\n */\nconst useChartHover = (): ChartHoverHook => {\n  const [activeIndex, setActiveIndex] = useState<number | null>(null);\n\n  const handleMouseEnter = (_: any, index: number) => {\n    setActiveIndex(index);\n  };\n\n  const handleMouseLeave = () => {\n    setActiveIndex(null);\n  };\n\n  return {\n    activeIndex,\n    handleMouseEnter,\n    handleMouseLeave,\n  };\n};\n\n// ==========================================\n// Animation Utilities\n// ==========================================\n\n/**\n * Creates animation configuration for pie chart\n * @param config - Animation configuration options\n * @returns Animation configuration object\n */\nconst createAnimationConfig = (config: Partial<AnimationConfig> = {}): AnimationConfig => {\n  return {\n    isAnimationActive: config.isAnimationActive ?? true,\n    animationBegin: config.animationBegin ?? 0,\n    animationDuration: config.animationDuration ?? 1500,\n    animationEasing: config.animationEasing ?? \"ease\",\n  };\n};\n\n// ==========================================\n// Event Handler Utilities\n// ==========================================\n\n/**\n * Creates event handlers for pie chart\n * @param onMouseEnter - Mouse enter handler\n * @param onMouseLeave - Mouse leave handler\n * @param onClick - Click handler\n * @returns Object containing event handlers\n */\nconst createEventHandlers = (\n  onMouseEnter?: (data: any, index: number) => void,\n  onMouseLeave?: () => void,\n  onClick?: (data: any, index: number) => void,\n) => {\n  return {\n    onMouseEnter: onMouseEnter\n      ? (data: any, index: number) => onMouseEnter(data, index)\n      : undefined,\n    onMouseLeave: onMouseLeave ? () => onMouseLeave() : undefined,\n    onClick: onClick ? (data: any, index: number) => onClick(data, index) : undefined,\n  };\n};\n\n// ==========================================\n// Export all utility functions\n// ==========================================\n\nexport {\n  calculateChartDimensions,\n  calculatePercentage,\n  calculateTwoLevelChartDimensions,\n  createAnimationConfig,\n  createEventHandlers,\n  getHoverStyles,\n  transformDataWithPercentages,\n  useChartHover,\n};\n","import clsx from \"clsx\";\nimport { memo, useCallback, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { Cell, Pie, PieChart as RechartsPieChart } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext.js\";\nimport { useTheme } from \"../../ThemeProvider/ThemeProvider.js\";\nimport { ChartContainer, ChartTooltip, ChartTooltipContent } from \"../Charts.js\";\nimport { useExportChartData, useTransformedKeys } from \"../hooks/index.js\";\nimport { DefaultLegend } from \"../shared/DefaultLegend/DefaultLegend.js\";\nimport { StackedLegend } from \"../shared/StackedLegend/StackedLegend.js\";\nimport { LegendItem } from \"../types/Legend.js\";\nimport { getCategoricalChartConfig } from \"../utils/dataUtils.js\";\nimport { PaletteName, useChartPalette } from \"../utils/PalletUtils.js\";\nimport { PieChartData } from \"./types/index.js\";\nimport {\n  calculateChartDimensions,\n  calculateTwoLevelChartDimensions,\n  createAnimationConfig,\n  createEventHandlers,\n  getHoverStyles,\n  transformDataWithPercentages,\n  useChartHover,\n} from \"./utils/PieChartUtils.js\";\n\nexport interface PieChartProps<T extends PieChartData> {\n  data: T;\n  categoryKey: keyof T[number];\n  dataKey: keyof T[number];\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: \"pie\" | \"donut\";\n  format?: \"percentage\" | \"number\";\n  legend?: boolean;\n  legendVariant?: \"default\" | \"stacked\";\n  isAnimationActive?: boolean;\n  appearance?: \"circular\" | \"semiCircular\";\n  cornerRadius?: number;\n  paddingAngle?: number;\n  onMouseEnter?: (data: any, index: number) => void;\n  onMouseLeave?: () => void;\n  onClick?: (data: any, index: number) => void;\n  className?: string;\n  maxChartSize?: number;\n  minChartSize?: number;\n  // Add height and width props\n  height?: number | string;\n  width?: number | string;\n}\n\nconst STACKED_LEGEND_BREAKPOINT = 400;\nconst MIN_CHART_SIZE = 150;\nconst MAX_CHART_SIZE = 500;\nconst CORNER_RADIUS = 0;\n\nconst PieChartComponent = <T extends PieChartData>({\n  data,\n  categoryKey,\n  dataKey,\n  theme = \"ocean\",\n  customPalette,\n  variant = \"pie\",\n  format = \"number\",\n  legend = true,\n  legendVariant = \"stacked\",\n  isAnimationActive = true,\n  appearance = \"circular\",\n  cornerRadius,\n  paddingAngle = 0,\n  onMouseEnter,\n  onMouseLeave,\n  onClick,\n  className,\n  maxChartSize = MAX_CHART_SIZE,\n  minChartSize = MIN_CHART_SIZE,\n  height,\n  width,\n}: PieChartProps<T>) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const wrapperRef = useRef<HTMLDivElement>(null);\n  const [wrapperRect, setWrapperRect] = useState({ width: 0, height: 0 });\n  const [hoveredLegendKey, setHoveredLegendKey] = useState<string | null>(null);\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n  const { activeIndex, handleMouseEnter, handleMouseLeave } = useChartHover();\n  const { theme: userTheme } = useTheme();\n\n  // Determine layout mode based on container width\n  const isRowLayout =\n    legend && legendVariant === \"stacked\" && wrapperRect.width >= STACKED_LEGEND_BREAKPOINT;\n\n  // Sort data by value (highest to lowest) for pie chart rendering\n  const sortedProcessedData = useMemo(\n    () => [...data].sort((a, b) => Number(b[dataKey]) - Number(a[dataKey])),\n    [data, dataKey],\n  );\n\n  const categories = useMemo(\n    () => sortedProcessedData.map((item) => String(item[categoryKey])),\n    [sortedProcessedData, categoryKey],\n  );\n  const transformedKeys = useTransformedKeys(categories);\n\n  // Memoize string conversions to avoid repeated calls\n  const categoryKeyString = useMemo(() => String(categoryKey), [categoryKey]);\n  const dataKeyString = useMemo(() => String(dataKey), [dataKey]);\n  const formatKey = useMemo(\n    () => (format === \"percentage\" ? \"percentage\" : dataKeyString),\n    [format, dataKeyString],\n  );\n\n  // Use provided dimensions or observed dimensions from the wrapper\n  const effectiveWidth = wrapperRect.width;\n  const effectiveHeight = wrapperRect.height;\n\n  // Calculate chart dimensions based on the smaller dimension of the container\n  const chartSize = useMemo(() => {\n    // Compute the available width for the chart. In row layout, chart and legend are side-by-side.\n    // Subtract the 20px gap defined in CSS to avoid over-estimating available width.\n    const containerWidth = isRowLayout ? Math.max(0, (effectiveWidth - 20) / 2) : effectiveWidth;\n\n    // If wrapper height isn't explicitly provided (or is very small), it will be driven by the\n    // chart's own content, creating a feedback loop that pins the size to the minimum.\n    // Prefer width in that case to size the chart sensibly.\n    const heightIsUsable = effectiveHeight >= minChartSize;\n\n    let size = heightIsUsable ? Math.min(containerWidth, effectiveHeight) : containerWidth;\n    size = Math.min(size, maxChartSize);\n    return Math.max(minChartSize, size);\n  }, [effectiveWidth, effectiveHeight, isRowLayout]);\n\n  const isSemiCircular = appearance === \"semiCircular\";\n  const chartViewportHeight = useMemo(\n    () => (isSemiCircular ? Math.max(1, Math.ceil(chartSize / 2)) : chartSize),\n    [chartSize, isSemiCircular],\n  );\n  const chartSizeStyle = useMemo(\n    () => ({ width: chartSize, height: chartViewportHeight }),\n    [chartSize, chartViewportHeight],\n  );\n  const rechartsProps = useMemo(\n    () => ({\n      width: \"100%\",\n      height: \"100%\",\n      minWidth: 1,\n      minHeight: 1,\n      initialDimension: { width: 1, height: 1 },\n    }),\n    [],\n  );\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"pieChartPalette\",\n    dataLength: sortedProcessedData.length,\n  });\n\n  const exportData = useExportChartData({\n    type: \"pie\",\n    data: sortedProcessedData,\n    categoryKey: categoryKey as string,\n    dataKeys: [dataKey as string],\n    colors,\n    legend,\n  });\n\n  // Memoize expensive data transformations and configurations\n  const transformedData = useMemo(\n    () => transformDataWithPercentages(sortedProcessedData as T, dataKey),\n    [sortedProcessedData, dataKey],\n  );\n\n  const chartConfig = useMemo(\n    () => getCategoricalChartConfig(sortedProcessedData as T, categoryKey, colors, transformedKeys),\n    [sortedProcessedData, categoryKey, colors, transformedKeys],\n  );\n\n  const animationConfig = useMemo(\n    () => createAnimationConfig({ isAnimationActive }),\n    [isAnimationActive],\n  );\n\n  const eventHandlers = useMemo(\n    () => createEventHandlers(onMouseEnter, onMouseLeave, onClick),\n    [onMouseEnter, onMouseLeave, onClick],\n  );\n\n  const sectorStyle = useMemo(() => {\n    let cornerRadiusValue: number = CORNER_RADIUS;\n\n    if (typeof cornerRadius === \"number\") {\n      cornerRadiusValue = cornerRadius;\n    } else {\n      const cornerRadiusTheme = userTheme.radius2xs;\n      if (cornerRadiusTheme) {\n        cornerRadiusValue =\n          typeof cornerRadiusTheme === \"string\" ? parseInt(cornerRadiusTheme) : cornerRadiusTheme;\n      }\n    }\n\n    return {\n      cornerRadius: cornerRadiusValue,\n      paddingAngle: variant === \"donut\" ? 0.5 : paddingAngle,\n    };\n  }, [cornerRadius, variant, paddingAngle, userTheme.radius2xs]);\n\n  const legendItems = useMemo(\n    () =>\n      sortedProcessedData.map((item, index) => ({\n        key: String(item[categoryKey]),\n        label: String(item[categoryKey]),\n        value: Number(item[dataKey]),\n        color: colors[index] || \"#000000\",\n      })),\n    [sortedProcessedData, categoryKey, dataKey, colors],\n  );\n\n  const defaultLegendItems = useMemo((): LegendItem[] => {\n    return legendItems.map(({ key, label, color }) => ({ key, label, color }));\n  }, [legendItems]);\n\n  const handleLegendItemHover = useCallback(\n    (index: number | null) => {\n      if (legendVariant !== \"stacked\") return;\n      if (index !== null) {\n        const item = sortedProcessedData[index];\n        if (item) {\n          const categoryValue = String(item[categoryKey]);\n          setHoveredLegendKey(categoryValue);\n          const transformedIndex = transformedData.findIndex(\n            (d) => String((d as any)[categoryKey]) === categoryValue,\n          );\n          if (transformedIndex !== -1) {\n            handleMouseEnter(transformedData[transformedIndex], transformedIndex);\n          }\n        }\n      } else {\n        setHoveredLegendKey(null);\n        handleMouseLeave();\n      }\n    },\n    [\n      sortedProcessedData,\n      categoryKey,\n      transformedData,\n      handleMouseEnter,\n      handleMouseLeave,\n      legendVariant,\n    ],\n  );\n\n  const handleChartMouseEnter = useCallback(\n    (entry: any, index: number) => {\n      handleMouseEnter(entry, index);\n      if (legend && legendVariant === \"stacked\") {\n        setHoveredLegendKey(String(entry[categoryKey]));\n      }\n      eventHandlers.onMouseEnter?.(entry, index);\n    },\n    [handleMouseEnter, categoryKey, legend, legendVariant, eventHandlers.onMouseEnter],\n  );\n\n  const handleChartMouseLeave = useCallback(() => {\n    handleMouseLeave();\n    if (legend && legendVariant === \"stacked\") {\n      setHoveredLegendKey(null);\n    }\n    eventHandlers.onMouseLeave?.();\n  }, [handleMouseLeave, legend, legendVariant, eventHandlers.onMouseLeave]);\n\n  const dimensions = useMemo(() => {\n    if (variant === \"donut\") {\n      return calculateTwoLevelChartDimensions(chartSize);\n    }\n    if (isSemiCircular) {\n      return { ...calculateChartDimensions(chartSize, variant), middleRadius: 0 };\n    }\n    return { outerRadius: \"90%\", innerRadius: 0, middleRadius: 0 };\n  }, [variant, chartSize, isSemiCircular]);\n\n  const startAngle = useMemo(() => (appearance === \"semiCircular\" ? 180 : 0), [appearance]);\n  const endAngle = useMemo(() => (appearance === \"semiCircular\" ? 0 : 360), [appearance]);\n\n  const commonPieProps = useMemo(\n    () => ({\n      data: transformedData,\n      dataKey: formatKey,\n      nameKey: categoryKeyString,\n      labelLine: false,\n      label: false,\n      ...animationConfig,\n      ...eventHandlers,\n      ...sectorStyle,\n      startAngle,\n      endAngle,\n      cx: \"50%\",\n      cy: isSemiCircular ? chartViewportHeight : \"50%\",\n      onMouseEnter: handleChartMouseEnter,\n      onMouseLeave: handleChartMouseLeave,\n    }),\n    [\n      transformedData,\n      formatKey,\n      categoryKeyString,\n      animationConfig,\n      eventHandlers,\n      sectorStyle,\n      startAngle,\n      endAngle,\n      isSemiCircular,\n      chartViewportHeight,\n      handleChartMouseEnter,\n      handleChartMouseLeave,\n    ],\n  );\n\n  // Use ResizeObserver for subsequent size changes\n  useLayoutEffect(() => {\n    const wrapper = wrapperRef.current;\n    if (!wrapper) return;\n\n    const observer = new ResizeObserver((entries) => {\n      const entry = entries[0];\n      if (entry) {\n        setWrapperRect({\n          width: entry.contentRect.width,\n          height: entry.contentRect.height,\n        });\n      }\n    });\n    observer.observe(wrapper);\n\n    // Read initial dimensions synchronously before first paint to avoid size jump\n    const rect = wrapper.getBoundingClientRect();\n    setWrapperRect({ width: rect.width, height: rect.height });\n    return () => observer.disconnect();\n  }, []);\n\n  const renderPieCharts = useCallback(() => {\n    if (variant === \"donut\") {\n      return [\n        <Pie\n          key=\"inner-pie\"\n          {...commonPieProps}\n          innerRadius={dimensions.innerRadius}\n          outerRadius={dimensions.middleRadius}\n        >\n          {transformedData.map((entry, index: number) => {\n            const categoryValue = String(entry[categoryKey as keyof typeof entry] || \"\");\n            const transformedKey = transformedKeys[categoryValue] ?? categoryValue;\n            const config = chartConfig[transformedKey];\n            const hoverStyles = getHoverStyles(index, activeIndex);\n            const fill = config?.color || colors[index];\n            return (\n              <Cell\n                key={`inner-cell-${index}`}\n                fill={fill}\n                {...hoverStyles}\n                stroke=\"none\"\n                className=\"openui-pie-chart__inner-cell\"\n              />\n            );\n          })}\n        </Pie>,\n        <Pie\n          key=\"outer-pie\"\n          {...commonPieProps}\n          innerRadius={dimensions.middleRadius}\n          outerRadius={dimensions.outerRadius}\n        >\n          {transformedData.map((entry, index: number) => {\n            const categoryValue = String(entry[categoryKey as keyof typeof entry] || \"\");\n            const transformedKey = transformedKeys[categoryValue] ?? categoryValue;\n            const config = chartConfig[transformedKey];\n            const hoverStyles = getHoverStyles(index, activeIndex);\n            const fill = config?.color || colors[index];\n            return <Cell key={`outer-cell-${index}`} fill={fill} {...hoverStyles} stroke=\"none\" />;\n          })}\n        </Pie>,\n      ];\n    }\n    return (\n      <Pie\n        {...commonPieProps}\n        outerRadius={dimensions.outerRadius}\n        innerRadius={dimensions.innerRadius}\n        activeIndex={activeIndex ?? undefined}\n      >\n        {transformedData.map((entry, index: number) => {\n          const categoryValue = String(entry[categoryKey as keyof typeof entry] || \"\");\n          const transformedKey = transformedKeys[categoryValue] ?? categoryValue;\n          const config = chartConfig[transformedKey];\n          const hoverStyles = getHoverStyles(index, activeIndex);\n          const fill = config?.color || colors[index];\n          return <Cell key={`cell-${index}`} fill={fill} {...hoverStyles} stroke=\"none\" />;\n        })}\n      </Pie>\n    );\n  }, [\n    variant,\n    commonPieProps,\n    dimensions,\n    transformedData,\n    categoryKey,\n    chartConfig,\n    activeIndex,\n    colors,\n    transformedKeys,\n  ]);\n\n  const renderLegend = useCallback(() => {\n    if (!legend) return null;\n    if (legendVariant === \"stacked\") {\n      return (\n        <div className=\"openui-pie-chart-legend-container\">\n          <StackedLegend\n            items={legendItems}\n            onItemHover={setHoveredLegendKey}\n            activeKey={hoveredLegendKey}\n            onLegendItemHover={handleLegendItemHover}\n            containerWidth={isRowLayout ? undefined : wrapperRect.width}\n          />\n        </div>\n      );\n    }\n    return (\n      <DefaultLegend\n        items={defaultLegendItems}\n        containerWidth={wrapperRect.width}\n        isExpanded={isLegendExpanded}\n        setIsExpanded={setIsLegendExpanded}\n      />\n    );\n  }, [\n    legend,\n    legendVariant,\n    legendItems,\n    hoveredLegendKey,\n    handleLegendItemHover,\n    wrapperRect.width,\n    isRowLayout,\n    defaultLegendItems,\n    isLegendExpanded,\n  ]);\n\n  const wrapperClassName = useMemo(\n    () =>\n      clsx(\"openui-pie-chart-container-wrapper\", className, {\n        \"layout-row\": isRowLayout,\n        \"layout-column\": !isRowLayout,\n        \"legend-default\": legend && legendVariant === \"default\",\n        \"legend-stacked\": legend && legendVariant === \"stacked\",\n      }),\n    [className, legend, legendVariant, isRowLayout],\n  );\n\n  const wrapperStyle = useMemo(() => {\n    const formatDimension = (value: number | string | undefined) => {\n      if (typeof value === \"number\") {\n        return `${value}px`;\n      }\n      return value;\n    };\n    const dimensions = {\n      width: formatDimension(width),\n      height: formatDimension(height),\n    };\n\n    return dimensions;\n  }, [width, height]);\n\n  return (\n    <div\n      ref={wrapperRef}\n      className={wrapperClassName}\n      style={wrapperStyle}\n      data-openui-chart={exportData}\n    >\n      <div className=\"openui-pie-chart-container\">\n        <div className=\"openui-pie-chart-container-inner\">\n          <div style={chartSizeStyle}>\n            <ChartContainer\n              config={chartConfig}\n              className=\"openui-pie-chart\"\n              rechartsProps={rechartsProps}\n            >\n              <RechartsPieChart>\n                <ChartTooltip\n                  content={<ChartTooltipContent showPercentage={format === \"percentage\"} />}\n                />\n                {renderPieCharts()}\n              </RechartsPieChart>\n            </ChartContainer>\n          </div>\n        </div>\n      </div>\n      {renderLegend()}\n    </div>\n  );\n};\n\nexport const PieChart = memo(PieChartComponent);\n\nPieChart.displayName = \"PieChart\";\n","/**\n * Truncates text to fit within specified width bounds\n * @param text - The original text\n * @param maxWidth - Maximum width in pixels\n * @param fontSize - Font size for measurement\n * @returns Truncated text with ellipsis if needed\n */\nconst truncateText = (text: string, maxWidth: number, fontSize = 10): string => {\n  if (maxWidth <= 0) return text;\n\n  // Create a temporary canvas to measure text width\n  const canvas = document.createElement(\"canvas\");\n  const context = canvas.getContext(\"2d\");\n  if (!context) return text;\n\n  context.font = `${fontSize}px Inter`;\n\n  // If text fits, return as is\n  if (context.measureText(text).width <= maxWidth) {\n    return text;\n  }\n\n  // Binary search for the longest text that fits\n  let low = 0;\n  let high = text.length;\n  let result = text;\n\n  while (low <= high) {\n    const mid = Math.floor((low + high) / 2);\n    const truncated = text.substring(0, mid) + \"...\";\n    const width = context.measureText(truncated).width;\n\n    if (width <= maxWidth) {\n      result = truncated;\n      low = mid + 1;\n    } else {\n      high = mid - 1;\n    }\n  }\n\n  return result;\n};\n\n/**\n * Calculates the available width for a text label based on its position and anchor point\n *\n * This function determines how much horizontal space is available for a text label\n * by checking its position relative to the container bounds. The calculation varies\n * based on the text anchor position:\n *\n * - For \"start\" anchored text: Available space is from labelX to container right edge\n * - For \"end\" anchored text: Available space is from container left edge to labelX\n * - For \"middle\" anchored text: Takes minimum of left/right space and doubles it\n *\n * @param labelX - X coordinate of the label position\n * @param containerWidth - Total width of the container\n * @param textAnchor - How text is anchored (\"start\", \"end\", or \"middle\")\n * @param padding - Optional padding to maintain from container edges (default 10px)\n * @returns The maximum width available for the label in pixels\n */\nconst calculateAvailableWidth = (\n  labelX: number,\n  containerWidth: number,\n  textAnchor: string,\n  padding = 0,\n): number => {\n  switch (textAnchor) {\n    case \"start\":\n      // Text starts at labelX, extends to the right\n      return Math.max(0, containerWidth - labelX - padding);\n    case \"end\":\n      // Text ends at labelX, extends to the left\n      return Math.max(0, labelX - padding);\n    case \"middle\":\n    default:\n      // Text is centered at labelX\n      const leftSpace = labelX - padding;\n      const rightSpace = containerWidth - labelX - padding;\n      return Math.max(0, Math.min(leftSpace, rightSpace) * 2);\n  }\n};\n\nexport { calculateAvailableWidth, truncateText };\n","import clsx from \"clsx\";\nimport React, { useLayoutEffect, useMemo, useRef } from \"react\";\nimport { calculateAvailableWidth, truncateText } from \"../utils\";\n\n// This is the props that are passed by recharts to the custom tick component\ninterface AxisLabelProps {\n  x?: number;\n  y?: number;\n  textAnchor?: string;\n  payload?: {\n    value: string;\n  };\n  className?: string;\n  portalContainerRef?: React.RefObject<HTMLDivElement | null>;\n\n  [key: string]: any; // To allow other props from recharts\n}\n\nexport const AxisLabel: React.FC<AxisLabelProps> = (props) => {\n  const { x, y, payload, textAnchor, portalContainerRef, className } = props;\n  const anchorRef = useRef<SVGGElement>(null);\n\n  /**\n   * Memoizes the calculation of truncated text for axis labels\n   *\n   * This hook handles text truncation based on available space in the chart container:\n   * 1. Returns empty string or original value if payload/container is missing\n   * 2. Calculates container width and available space based on text anchor position\n   * 3. Truncates text to fit within available width using specified font size\n   *\n   * @returns {string} Truncated text that fits within available space\n   *\n   * Dependencies:\n   * - payload?.value: The text content to truncate\n   * - x: X-coordinate of the label\n   * - textAnchor: Text anchor position ('start', 'middle', 'end')\n   * - portalContainerRef: Reference to container element\n   */\n  const truncatedText = useMemo(() => {\n    if (!payload?.value || !portalContainerRef?.current) {\n      return payload?.value || \"\";\n    }\n\n    const container = portalContainerRef.current;\n    // Get the width of the container\n    const containerWidth = container.getBoundingClientRect().width;\n    // Get the padding of the container\n    const padding = 0;\n    // Get the font size of the text\n    const fontSize = 10;\n\n    // Calculate available width based on text anchor and position, and padding\n    const availableWidth = calculateAvailableWidth(\n      x || 0,\n      containerWidth,\n      textAnchor || \"middle\",\n      padding,\n    );\n\n    return truncateText(payload.value, availableWidth, fontSize);\n  }, [payload?.value, x, textAnchor, portalContainerRef]);\n\n  useLayoutEffect(() => {\n    const container = portalContainerRef?.current;\n    const anchor = anchorRef.current;\n\n    if (!container || !anchor || !truncatedText) {\n      return;\n    }\n\n    // Create the label element\n    const labelEl = document.createElement(\"div\");\n    labelEl.textContent = truncatedText;\n    container.appendChild(labelEl);\n\n    // Function to calculate and apply styles\n    const updatePosition = () => {\n      const anchorRect = anchor.getBoundingClientRect();\n      const containerRect = container.getBoundingClientRect();\n      const left = anchorRect.left - containerRect.left;\n      const top = anchorRect.top - containerRect.top;\n\n      const padding = 0;\n      let transform = \"\";\n      if (textAnchor === \"end\") {\n        transform = `translate(calc(-100% - ${padding}px), -50%)`;\n      } else if (textAnchor === \"start\") {\n        transform = `translate(${padding}px, -50%)`;\n      } else {\n        transform = \"translate(-50%, -50%)\";\n      }\n\n      labelEl.style.position = \"absolute\";\n      labelEl.style.left = `${left}px`;\n      labelEl.style.top = `${top}px`;\n      labelEl.style.transform = transform;\n      labelEl.style.pointerEvents = \"none\";\n      labelEl.style.zIndex = \"0\";\n      labelEl.className = clsx(\"openui-chart-polar-angle-axis-label\", className);\n\n      // Update text content if it has changed due to container resize\n      const containerWidth = containerRect.width;\n      const availableWidth = calculateAvailableWidth(\n        left,\n        containerWidth,\n        textAnchor ?? \"middle\",\n        0,\n      );\n      const newTruncatedText = truncateText(payload?.value ?? \"\", availableWidth, 10);\n      if (labelEl.textContent !== newTruncatedText) {\n        labelEl.textContent = newTruncatedText;\n      }\n    };\n\n    updatePosition();\n\n    const resizeObserver = new ResizeObserver(updatePosition);\n    resizeObserver.observe(container);\n\n    // Cleanup function to run when the component unmounts or deps change\n    return () => {\n      resizeObserver.disconnect();\n      if (container.contains(labelEl)) {\n        container.removeChild(labelEl);\n      }\n    };\n  }, [x, y, textAnchor, truncatedText, portalContainerRef, className, payload?.value]);\n\n  return <g ref={anchorRef} transform={`translate(${x || 0}, ${y || 0})`} />;\n};\n","import clsx from \"clsx\";\nimport React, { memo, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport {\n  PolarAngleAxis,\n  PolarGrid,\n  Radar,\n  RadarChart as RechartsRadarChart,\n  ResponsiveContainer,\n} from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { ChartConfig, ChartContainer, ChartTooltip } from \"../Charts\";\nimport { SideBarTooltipProvider } from \"../context/SideBarTooltipContext\";\nimport { useExportChartData, useTransformedKeys } from \"../hooks\";\nimport { ActiveDot, CustomTooltipContent, DefaultLegend } from \"../shared\";\nimport { LegendItem } from \"../types\";\nimport { useChartPalette } from \"../utils/PalletUtils\";\nimport { get2dChartConfig, getDataKeys, getLegendItems } from \"../utils/dataUtils\";\nimport { AxisLabel } from \"./components/AxisLabel\";\nimport { RadarChartData } from \"./types\";\n\nconst MIN_CHART_SIZE = 150;\nconst MAX_CHART_SIZE = 296;\n\nexport interface RadarChartProps<T extends RadarChartData> {\n  data: T;\n  categoryKey: keyof T[number];\n  theme?: \"ocean\" | \"orchid\" | \"emerald\" | \"sunset\" | \"spectrum\" | \"vivid\";\n  customPalette?: string[];\n  variant?: \"line\" | \"area\";\n  grid?: boolean;\n  legend?: boolean;\n  strokeWidth?: number;\n  areaOpacity?: number;\n  icons?: Partial<Record<keyof T[number], React.ComponentType>>;\n  isAnimationActive?: boolean;\n  height?: number;\n  width?: number;\n}\n\nconst RadarChartComponent = <T extends RadarChartData>({\n  data,\n  categoryKey,\n  theme = \"ocean\",\n  customPalette,\n  variant = \"line\",\n  grid = true,\n  legend = true,\n  strokeWidth = 2,\n  areaOpacity = 0.2,\n  icons = {},\n  isAnimationActive = false,\n  height,\n  width,\n}: RadarChartProps<T>) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const dataKeys = useMemo(() => {\n    return getDataKeys(data, categoryKey as string);\n  }, [data, categoryKey]);\n\n  const transformedKeys = useTransformedKeys(dataKeys);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"radarChartPalette\",\n    dataLength: dataKeys.length,\n  });\n\n  // Create Config\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig(dataKeys, colors, transformedKeys, undefined, icons);\n  }, [dataKeys, icons, colors, transformedKeys]);\n\n  const legendItems: LegendItem[] = useMemo(() => {\n    return getLegendItems(dataKeys, colors, icons);\n  }, [dataKeys, colors, icons]);\n\n  const exportData = useExportChartData({\n    type: \"radar\",\n    data,\n    categoryKey: categoryKey as string,\n    dataKeys,\n    colors,\n    legend,\n  });\n\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n  const wrapperRef = useRef<HTMLDivElement>(null);\n  const [wrapperRect, setWrapperRect] = useState({ width: 0, height: 0 });\n\n  useLayoutEffect(() => {\n    const wrapper = wrapperRef.current;\n    if (!wrapper) return;\n\n    const observer = new ResizeObserver((entries) => {\n      const entry = entries[0];\n      if (entry) {\n        setWrapperRect({\n          width: entry.contentRect.width,\n          height: entry.contentRect.height,\n        });\n      }\n    });\n\n    // Read initial dimensions synchronously before first paint to avoid size jump\n    const rect = wrapper.getBoundingClientRect();\n    setWrapperRect({ width: rect.width, height: rect.height });\n\n    observer.observe(wrapper);\n    return () => observer.disconnect();\n  }, []);\n\n  const chartSize = useMemo(() => {\n    const effectiveWidth = wrapperRect.width;\n    const effectiveHeight = wrapperRect.height;\n    let charts = Math.min(effectiveWidth, effectiveHeight);\n    charts = Math.min(charts, MAX_CHART_SIZE);\n    return Math.max(MIN_CHART_SIZE, charts);\n  }, [wrapperRect]);\n\n  const chartSizeStyle = useMemo(() => ({ width: chartSize, height: chartSize }), [chartSize]);\n  const rechartsProps: Omit<React.ComponentProps<typeof ResponsiveContainer>, \"children\"> = useMemo(\n    () => ({\n      width: \"100%\",\n      height: \"100%\",\n      minWidth: 1,\n      minHeight: 1,\n      initialDimension: { width: 1, height: 1 },\n    }),\n    [],\n  );\n\n  const radars = useMemo(() => {\n    return dataKeys.map((key) => {\n      const transformedKey = transformedKeys[key];\n      const color = `var(--color-${transformedKey})`;\n      if (variant === \"line\") {\n        return (\n          <Radar\n            key={key}\n            dataKey={key}\n            fill={color}\n            fillOpacity={0}\n            stroke={color}\n            strokeWidth={strokeWidth}\n            isAnimationActive={isAnimationActive}\n            activeDot={<ActiveDot />}\n          />\n        );\n      } else {\n        return (\n          <Radar\n            key={key}\n            dataKey={key}\n            fill={color}\n            stroke={color}\n            strokeWidth={strokeWidth}\n            fillOpacity={areaOpacity}\n            isAnimationActive={isAnimationActive}\n            activeDot={<ActiveDot />}\n          />\n        );\n      }\n    });\n  }, [dataKeys, transformedKeys, variant, strokeWidth, areaOpacity, isAnimationActive]);\n\n  const wrapperClassName = useMemo(\n    () =>\n      clsx(\"openui-radar-chart-container-wrapper\", {\n        \"layout-column\": true,\n      }),\n    [],\n  );\n\n  const wrapperStyle = useMemo(() => {\n    const formatDimension = (value: number | string | undefined) => {\n      if (typeof value === \"number\") {\n        return `${value}px`;\n      }\n      return value;\n    };\n    const dimensions = {\n      width: formatDimension(width),\n      height: formatDimension(height),\n    };\n\n    if (dimensions.width === undefined) {\n      delete dimensions.width;\n    }\n\n    if (dimensions.height === undefined) {\n      delete dimensions.height;\n    }\n\n    return dimensions;\n  }, [width, height]);\n\n  return (\n    <SideBarTooltipProvider\n      isSideBarTooltipOpen={false}\n      setIsSideBarTooltipOpen={() => {}}\n      data={undefined}\n      setData={() => {}}\n    >\n      <div\n        ref={wrapperRef}\n        className={wrapperClassName}\n        style={wrapperStyle}\n        data-openui-chart={exportData}\n      >\n        <div className=\"openui-radar-chart-container\">\n          <div className=\"openui-radar-chart-container-inner\">\n            <div style={chartSizeStyle}>\n              <ChartContainer\n                config={chartConfig}\n                className=\"openui-radar-chart\"\n                rechartsProps={rechartsProps}\n              >\n                <RechartsRadarChart\n                  data={data}\n                  margin={{\n                    left: 10,\n                    right: 10,\n                    top: 10,\n                    bottom: 10,\n                  }}\n                >\n                  {grid && <PolarGrid className=\"openui-chart-polar-grid\" stroke=\"currentColor\" />}\n                  <PolarAngleAxis\n                    dataKey={categoryKey as string}\n                    tick={<AxisLabel portalContainerRef={wrapperRef} />}\n                  />\n\n                  <ChartTooltip\n                    cursor={false}\n                    content={<CustomTooltipContent parentRef={wrapperRef} />}\n                  />\n                  {/* rendering the radars here */}\n                  {radars}\n                </RechartsRadarChart>\n              </ChartContainer>\n            </div>\n          </div>\n        </div>\n        {legend && (\n          <DefaultLegend\n            items={legendItems}\n            containerWidth={wrapperRect.width}\n            isExpanded={isLegendExpanded}\n            setIsExpanded={setIsLegendExpanded}\n            style={{ paddingTop: 0 }}\n          />\n        )}\n      </div>\n    </SideBarTooltipProvider>\n  );\n};\n\nexport const RadarChart = memo(RadarChartComponent);\n\nRadarChart.displayName = \"RadarChart\";\n","/**\n * Utility functions for radial charts\n */\nimport { useState } from \"react\";\nimport { RadialChartData } from \"../types\";\n\n// ==========================================\n\nexport interface RadialChartDimensions {\n  outerRadius: number;\n  innerRadius: number;\n}\n\nexport interface RadialHoverStyles {\n  opacity: number;\n  stroke: string;\n  strokeWidth: number;\n}\n\nexport interface RadialChartHoverHook {\n  activeIndex: number | null;\n  handleMouseEnter: (event: any, index: number) => void;\n  handleMouseLeave: () => void;\n}\n\nexport interface RadialAnimationConfig {\n  isAnimationActive: boolean;\n  animationBegin: number;\n  animationDuration: number;\n  animationEasing: \"ease\" | \"ease-in\" | \"ease-out\" | \"ease-in-out\" | \"linear\";\n}\n\n// ==========================================\n// Core Calculation Utilities\n// ==========================================\n\n/**\n * Calculates the percentage value of a number relative to a total\n * @param value - The value to calculate percentage for\n * @param total - The total value to calculate percentage against\n * @returns The calculated percentage rounded to 2 decimal places\n */\nexport const calculatePercentage = (value: number, total: number): number => {\n  if (total === 0) {\n    return 0;\n  }\n  return Number(((value / total) * 100).toFixed(2));\n};\n\n// ==========================================\n// Chart Dimension Calculations\n// ==========================================\n\n/**\n * Calculates dimensions for radial charts based on container size\n * @param width - The container width\n * @param variant - The chart variant ('semicircle' or 'circular')\n * @returns Object containing outer and inner radius values\n */\nexport const calculateRadialChartDimensions = (width: number): RadialChartDimensions => {\n  // Prefer a base that better utilizes width while leaving a small margin to prevent clipping\n  const baseRadiusPercentage = 0.45;\n  let outerRadius = Math.round(width * baseRadiusPercentage);\n\n  // Clamp radius within sensible bounds and leave ~10px margin from the edge\n  outerRadius = Math.max(50, Math.min(outerRadius, Math.round(width / 2) - 10));\n\n  // The inner radius is 30% of the outer radius\n  const innerRadius = Math.round(outerRadius * 0.3);\n\n  return { outerRadius, innerRadius };\n};\n\n// ==========================================\n// Layout and Styling Utilities\n// ==========================================\n\n/**\n * Generates hover style properties for radial chart cells\n * @param index - The index of the current cell\n * @param activeIndex - The index of the currently hovered cell\n * @returns Object containing hover style properties\n */\nexport const getRadialHoverStyles = (\n  index: number,\n  activeIndex: number | null,\n): RadialHoverStyles => {\n  return {\n    opacity: activeIndex === null || activeIndex === index ? 1 : 0.6,\n    stroke: activeIndex === index ? \"#fff\" : \"none\",\n    strokeWidth: activeIndex === index ? 2 : 0,\n  };\n};\n\n// ==========================================\n// Data Transformation Utilities\n// ==========================================\n\n/**\n * Transforms data by adding percentage calculations and colors\n * @param data - The input data array\n * @param dataKey - The key to use for value calculations\n * @param theme - The color theme to use\n * @returns Transformed data with added percentage, original value, and fill color\n */\nexport const transformRadialDataWithPercentages = <T extends RadialChartData>(\n  data: T,\n  dataKey: keyof T[number],\n  colors: string[], // Change this from 'theme: string' to 'colors: string[]'\n) => {\n  const total = data.reduce((sum, item) => sum + Number(item[dataKey]), 0);\n\n  return data.map((item, index) => ({\n    ...item,\n    percentage: calculatePercentage(Number(item[dataKey as string]), total),\n    originalValue: item[dataKey as string],\n    fill: colors[index],\n  }));\n};\n\n// ==========================================\n// Hover Effect Utilities\n// ==========================================\n\n/**\n * Custom hook for managing radial chart hover effects\n * @returns Object containing hover state and handlers\n */\nexport const useRadialChartHover = (): RadialChartHoverHook => {\n  const [activeIndex, setActiveIndex] = useState<number | null>(null);\n\n  const handleMouseEnter = (_: any, index: number) => {\n    setActiveIndex(index);\n  };\n\n  const handleMouseLeave = () => {\n    setActiveIndex(null);\n  };\n\n  return {\n    activeIndex,\n    handleMouseEnter,\n    handleMouseLeave,\n  };\n};\n\n// ==========================================\n// Animation Utilities\n// ==========================================\n\n/**\n * Creates animation configuration for radial chart\n * @param config - Animation configuration options\n * @returns Animation configuration object\n */\nexport const createRadialAnimationConfig = (\n  config: Partial<RadialAnimationConfig> = {},\n): RadialAnimationConfig => {\n  return {\n    isAnimationActive: config.isAnimationActive ?? true,\n    animationBegin: config.animationBegin ?? 0,\n    animationDuration: config.animationDuration ?? 1500,\n    animationEasing: config.animationEasing ?? \"ease\",\n  };\n};\n\n// ==========================================\n// Event Handler Utilities\n// ==========================================\n\n/**\n * Creates event handlers for radial chart\n * @param onMouseEnter - Mouse enter handler\n * @param onMouseLeave - Mouse leave handler\n * @param onClick - Click handler\n * @returns Object containing event handlers\n */\nexport const createRadialEventHandlers = (\n  onMouseEnter?: (data: any, index: number) => void,\n  onMouseLeave?: () => void,\n  onClick?: (data: any, index: number) => void,\n) => {\n  return {\n    onMouseEnter: onMouseEnter\n      ? (data: any, index: number) => onMouseEnter(data, index)\n      : undefined,\n    onMouseLeave: onMouseLeave ? () => onMouseLeave() : undefined,\n    onClick: onClick ? (data: any, index: number) => onClick(data, index) : undefined,\n  };\n};\n\n// ==========================================\n// Backward compatibility - keeping old function names\n// ==========================================\n\n// Keep old function names for backward compatibility\nexport const transformRadialData = transformRadialDataWithPercentages;\nexport const useChartHover = useRadialChartHover;\nexport const getHoverStyles = getRadialHoverStyles;\n","import clsx from \"clsx\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Cell, PolarGrid, RadialBar, RadialBarChart, ResponsiveContainer } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { ChartContainer, ChartTooltip, ChartTooltipContent } from \"../Charts\";\nimport { useExportChartData, useTransformedKeys } from \"../hooks\";\nimport { DefaultLegend } from \"../shared/DefaultLegend/DefaultLegend\";\nimport { StackedLegend } from \"../shared/StackedLegend/StackedLegend\";\nimport { LegendItem } from \"../types/Legend\";\nimport { getCategoricalChartConfig } from \"../utils/dataUtils\";\nimport { PaletteName, useChartPalette } from \"../utils/PalletUtils\";\nimport { RadialChartData } from \"./types\";\nimport {\n  calculateRadialChartDimensions,\n  createRadialAnimationConfig,\n  createRadialEventHandlers,\n  getRadialHoverStyles,\n  transformRadialDataWithPercentages,\n  useRadialChartHover,\n} from \"./utils/RadialChartUtils\";\n\nexport interface RadialChartProps<T extends RadialChartData> {\n  data: T;\n  categoryKey: keyof T[number];\n  dataKey: keyof T[number];\n  theme?: PaletteName;\n  customPalette?: string[];\n  variant?: \"semicircle\" | \"circular\";\n  format?: \"percentage\" | \"number\";\n  legend?: boolean;\n  legendVariant?: \"default\" | \"stacked\";\n  grid?: boolean;\n  isAnimationActive?: boolean;\n  cornerRadius?: number;\n  onMouseEnter?: (data: any, index: number) => void;\n  onMouseLeave?: () => void;\n  onClick?: (data: any, index: number) => void;\n  className?: string;\n  maxChartSize?: number;\n  minChartSize?: number;\n  height?: number | string;\n  width?: number | string;\n}\n\nconst STACKED_LEGEND_BREAKPOINT = 400;\nconst MIN_CHART_SIZE = 150;\nconst MAX_CHART_SIZE = 500;\n\nexport const RadialChart = <T extends RadialChartData>({\n  data,\n  categoryKey,\n  dataKey,\n  theme = \"ocean\",\n  customPalette,\n  variant = \"circular\",\n  format = \"number\",\n  legend = true,\n  legendVariant = \"stacked\",\n  grid = false,\n  isAnimationActive = false,\n  cornerRadius = 10,\n  onMouseEnter,\n  onMouseLeave,\n  onClick,\n  className,\n  maxChartSize = MAX_CHART_SIZE,\n  minChartSize = MIN_CHART_SIZE,\n  height,\n  width,\n}: RadialChartProps<T>) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const wrapperRef = useRef<HTMLDivElement>(null);\n  const [wrapperRect, setWrapperRect] = useState({ width: 0, height: 0 });\n  const [hoveredLegendKey, setHoveredLegendKey] = useState<string | null>(null);\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n  const { activeIndex, handleMouseEnter, handleMouseLeave } = useRadialChartHover();\n\n  // Determine layout mode based on container width\n  const isRowLayout =\n    legend && legendVariant === \"stacked\" && wrapperRect.width >= STACKED_LEGEND_BREAKPOINT;\n\n  // Sort data by value (highest to lowest) for radial chart rendering\n  const sortedProcessedData = useMemo(\n    () => [...data].sort((a, b) => Number(b[dataKey]) - Number(a[dataKey])),\n    [data, dataKey],\n  );\n\n  const categories = useMemo(\n    () => sortedProcessedData.map((item) => String(item[categoryKey])),\n    [sortedProcessedData, categoryKey],\n  );\n  const transformedKeys = useTransformedKeys(categories);\n\n  // Memoize string conversions to avoid repeated calls\n  const categoryKeyString = useMemo(() => String(categoryKey), [categoryKey]);\n  const dataKeyString = useMemo(() => String(dataKey), [dataKey]);\n  const formatKey = useMemo(\n    () => (format === \"percentage\" ? \"percentage\" : dataKeyString),\n    [format, dataKeyString],\n  );\n\n  // Use provided dimensions or observed dimensions from the wrapper\n  const effectiveWidth = wrapperRect.width;\n  const effectiveHeight = wrapperRect.height;\n\n  // Calculate chart dimensions based on the smaller dimension of the container\n  const chartSize = useMemo(() => {\n    // Compute the available width for the chart. In row layout, chart and legend sit side-by-side.\n    // Subtract the 20px gap defined in CSS to avoid over-estimating available width.\n    const containerWidth = isRowLayout ? Math.max(0, (effectiveWidth - 20) / 2) : effectiveWidth;\n\n    // If wrapper height isn't explicitly provided (or is very small), prefer sizing by width to\n    // avoid a feedback loop where height depends on the chart, which then clamps the size.\n    const heightIsUsable = effectiveHeight >= minChartSize;\n\n    let size = heightIsUsable ? Math.min(containerWidth, effectiveHeight) : containerWidth;\n    size = Math.min(size, maxChartSize);\n    return Math.max(minChartSize, size);\n  }, [effectiveWidth, effectiveHeight, isRowLayout]);\n\n  const chartSizeStyle = useMemo(\n    () => ({\n      width: chartSize,\n      height: chartSize,\n    }),\n    [chartSize],\n  );\n\n  const rechartsProps: Omit<React.ComponentProps<typeof ResponsiveContainer>, \"children\"> = useMemo(\n    () => ({\n      width: \"100%\",\n      height: \"100%\",\n      minWidth: 1,\n      minHeight: 1,\n      initialDimension: { width: 1, height: 1 },\n    }),\n    [],\n  );\n\n  // Calculate chart radii\n  const dimensions = useMemo(() => calculateRadialChartDimensions(chartSize), [chartSize]);\n\n  // Get color palette and distribute colors\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"radialChartPalette\",\n    dataLength: sortedProcessedData.length,\n  });\n\n  const exportData = useExportChartData({\n    type: \"pie\",\n    data: sortedProcessedData,\n    categoryKey: categoryKey as string,\n    dataKeys: [dataKey as string],\n    colors,\n    legend,\n  });\n\n  // Memoize expensive data transformations and configurations\n  const transformedData = useMemo(\n    () => transformRadialDataWithPercentages(sortedProcessedData as T, dataKey, colors),\n    [sortedProcessedData, dataKey, colors],\n  );\n\n  const chartConfig = useMemo(\n    () => getCategoricalChartConfig(sortedProcessedData as T, categoryKey, colors, transformedKeys),\n    [sortedProcessedData, categoryKey, colors, transformedKeys],\n  );\n\n  const animationConfig = useMemo(\n    () => createRadialAnimationConfig({ isAnimationActive }),\n    [isAnimationActive],\n  );\n\n  const eventHandlers = useMemo(\n    () => createRadialEventHandlers(onMouseEnter, onMouseLeave, onClick),\n    [onMouseEnter, onMouseLeave, onClick],\n  );\n\n  // Create legend items for both variants\n  const legendItems = useMemo(\n    () =>\n      sortedProcessedData.map((item, index) => ({\n        key: String(item[categoryKey]),\n        label: String(item[categoryKey]),\n        value: Number(item[dataKey]),\n        color: colors[index] || \"#000000\",\n      })),\n    [sortedProcessedData, categoryKey, dataKey, colors],\n  );\n\n  const defaultLegendItems = useMemo((): LegendItem[] => {\n    return legendItems.map(({ key, label, color }) => ({ key, label, color }));\n  }, [legendItems]);\n\n  // Handle legend item hover to highlight radial bar\n  const handleLegendItemHover = useCallback(\n    (index: number | null) => {\n      if (legendVariant !== \"stacked\") return;\n      if (index !== null) {\n        const item = sortedProcessedData[index];\n        if (item) {\n          const categoryValue = String(item[categoryKey]);\n          setHoveredLegendKey(categoryValue);\n          // Find the index in the transformed data (which is also sorted)\n          const transformedIndex = transformedData.findIndex(\n            (d) => String((d as any)[categoryKey]) === categoryValue,\n          );\n          if (transformedIndex !== -1) {\n            handleMouseEnter(transformedData[transformedIndex], transformedIndex);\n          }\n        }\n      } else {\n        setHoveredLegendKey(null);\n        handleMouseLeave();\n      }\n    },\n    [\n      sortedProcessedData,\n      categoryKey,\n      transformedData,\n      handleMouseEnter,\n      handleMouseLeave,\n      legendVariant,\n    ],\n  );\n\n  // Enhanced chart hover handlers\n  const handleChartMouseEnter = useCallback(\n    (entry: any, index: number) => {\n      handleMouseEnter(entry, index);\n      if (legend && legendVariant === \"stacked\") {\n        setHoveredLegendKey(String(entry[categoryKey]));\n      }\n      eventHandlers.onMouseEnter?.(entry, index);\n    },\n    [handleMouseEnter, categoryKey, legend, legendVariant, eventHandlers.onMouseEnter],\n  );\n\n  const handleChartMouseLeave = useCallback(() => {\n    handleMouseLeave();\n    if (legend && legendVariant === \"stacked\") {\n      setHoveredLegendKey(null);\n    }\n    eventHandlers.onMouseLeave?.();\n  }, [handleMouseLeave, legend, legendVariant, eventHandlers.onMouseLeave]);\n\n  // Setup ResizeObserver to watch the wrapper element\n  useEffect(() => {\n    const wrapper = wrapperRef.current;\n    if (!wrapper) return;\n\n    // Use ResizeObserver if component is in responsive mode (no fixed width/height)\n    const observer = new ResizeObserver((entries) => {\n      const entry = entries[0];\n      if (entry) {\n        setWrapperRect({\n          width: entry.contentRect.width,\n          height: entry.contentRect.height,\n        });\n      }\n    });\n    observer.observe(wrapper);\n    return () => observer.disconnect();\n  }, []);\n\n  const renderLegend = useCallback(() => {\n    if (!legend) return null;\n    if (legendVariant === \"stacked\") {\n      return (\n        <div className=\"openui-radial-chart-legend-container\">\n          <StackedLegend\n            items={legendItems}\n            onItemHover={setHoveredLegendKey}\n            activeKey={hoveredLegendKey}\n            onLegendItemHover={handleLegendItemHover}\n            containerWidth={isRowLayout ? undefined : wrapperRect.width}\n          />\n        </div>\n      );\n    }\n    return (\n      <DefaultLegend\n        items={defaultLegendItems}\n        containerWidth={wrapperRect.width}\n        isExpanded={isLegendExpanded}\n        setIsExpanded={setIsLegendExpanded}\n      />\n    );\n  }, [\n    legend,\n    legendVariant,\n    legendItems,\n    hoveredLegendKey,\n    handleLegendItemHover,\n    wrapperRect.width,\n    isRowLayout,\n    defaultLegendItems,\n    isLegendExpanded,\n  ]);\n\n  const wrapperClassName = clsx(\"openui-radial-chart-container-wrapper\", className, {\n    \"layout-row\": isRowLayout,\n    \"layout-column\": !isRowLayout,\n    \"legend-default\": legend && legendVariant === \"default\",\n    \"legend-stacked\": legend && legendVariant === \"stacked\",\n  });\n\n  // Correct angles for semicircle (top half)\n  const startAngle = variant === \"semicircle\" ? 180 : 0;\n  const endAngle = variant === \"semicircle\" ? 0 : 360;\n\n  const wrapperStyle = useMemo(() => {\n    const formatDimension = (value: number | string | undefined) => {\n      if (typeof value === \"number\") {\n        return `${value}px`;\n      }\n      return value;\n    };\n    const dimensions = {\n      width: formatDimension(width),\n      height: formatDimension(height),\n    };\n\n    if (dimensions.width === undefined) {\n      delete dimensions.width;\n    }\n\n    if (dimensions.height === undefined) {\n      delete dimensions.height;\n    }\n    return dimensions;\n  }, [width, height]);\n\n  return (\n    <div\n      ref={wrapperRef}\n      className={wrapperClassName}\n      style={wrapperStyle}\n      aria-description=\"radial-chart-wrapper\"\n      data-openui-chart={exportData}\n    >\n      <div className=\"openui-radial-chart-container\">\n        <div className=\"openui-radial-chart-container-inner\">\n          <div style={chartSizeStyle}>\n            <ChartContainer\n              config={chartConfig}\n              className=\"openui-radial-chart\"\n              rechartsProps={rechartsProps}\n            >\n              <RadialBarChart\n                data={transformedData}\n                startAngle={startAngle}\n                endAngle={endAngle}\n                innerRadius={dimensions.innerRadius}\n                outerRadius={dimensions.outerRadius}\n              >\n                {grid && <PolarGrid gridType=\"circle\" />}\n                <ChartTooltip\n                  cursor={false}\n                  content={\n                    <ChartTooltipContent\n                      showPercentage={format === \"percentage\"}\n                      nameKey={categoryKeyString}\n                    />\n                  }\n                />\n                <RadialBar\n                  dataKey={formatKey}\n                  background={!grid}\n                  cornerRadius={cornerRadius}\n                  {...animationConfig}\n                  activeIndex={activeIndex ?? undefined}\n                  onMouseEnter={handleChartMouseEnter}\n                  onMouseLeave={handleChartMouseLeave}\n                  onClick={eventHandlers.onClick}\n                >\n                  {transformedData.map((entry, index) => {\n                    const categoryValue = String(entry[categoryKey as keyof typeof entry] || \"\");\n                    const config = chartConfig[categoryValue];\n                    const hoverStyles = getRadialHoverStyles(index, activeIndex);\n                    const fill = config?.color || colors[index];\n                    return (\n                      <Cell key={`cell-${index}`} fill={fill} {...hoverStyles} stroke=\"none\" />\n                    );\n                  })}\n                </RadialBar>\n              </RadialBarChart>\n            </ChartContainer>\n          </div>\n        </div>\n      </div>\n      {renderLegend()}\n    </div>\n  );\n};\n","import React, { useState } from \"react\";\n\nexport interface ScatterDotProps {\n  cx?: number;\n  cy?: number;\n  fill?: string;\n  radius?: number;\n  variant?: \"circle\" | \"square\";\n}\n\nconst ScatterDot: React.FC<ScatterDotProps> = ({ cx, cy, fill, variant = \"circle\" }) => {\n  const [active, setActive] = useState(false);\n  if (typeof cx !== \"number\" || typeof cy !== \"number\") {\n    return null;\n  }\n\n  const OUTLINE_COLOR = \"var(--openui-highlight)\";\n  const OUTLINE_WIDTH = 2;\n  const displayRadius = active ? 5 : 3;\n\n  if (variant === \"square\") {\n    const sideLength = displayRadius * 2;\n    return (\n      <rect\n        x={cx - displayRadius}\n        y={cy - displayRadius}\n        width={sideLength}\n        height={sideLength}\n        fill={fill}\n        stroke={active ? OUTLINE_COLOR : \"none\"}\n        strokeWidth={OUTLINE_WIDTH}\n        strokeLinejoin=\"round\"\n        vectorEffect=\"non-scaling-stroke\"\n        rx={2}\n        onPointerEnter={() => {\n          setActive(true);\n        }}\n        onPointerLeave={() => {\n          setActive(false);\n        }}\n      />\n    );\n  }\n\n  return (\n    <circle\n      cx={cx}\n      cy={cy}\n      r={displayRadius}\n      fill={fill}\n      stroke={active ? OUTLINE_COLOR : \"none\"}\n      strokeWidth={OUTLINE_WIDTH}\n      vectorEffect=\"non-scaling-stroke\"\n      onPointerEnter={() => {\n        setActive(true);\n      }}\n      onPointerLeave={() => {\n        setActive(false);\n      }}\n    />\n  );\n};\n\nexport default ScatterDot;\n","import { ScatterChartData, ScatterPoint } from \"../types\";\n\n/**\n * Extracts dataset names from scatter chart data\n * @param data - The scatter chart data (array of datasets)\n * @returns Array of dataset names\n */\nexport const getScatterDatasets = (data: ScatterChartData): string[] => {\n  if (!data || !Array.isArray(data)) {\n    return [];\n  }\n  return data.map((dataset) => dataset.name);\n};\n\n/**\n * Transforms scatter chart data for recharts consumption\n * @param data - The scatter chart data (array of datasets)\n * @param datasets - Array of dataset names to include\n * @param colors - Array of colors for datasets\n * @returns Flattened array of all points with color and dataset info\n */\nexport const transformScatterData = (\n  data: ScatterChartData,\n  datasets: string[],\n  colors: string[],\n) => {\n  // Guard against undefined or null data\n  if (!data || !Array.isArray(data) || data.length === 0) {\n    return [];\n  }\n\n  const datasetColors: { [key: string]: string } = {};\n  datasets.forEach((ds, i) => {\n    datasetColors[ds] = colors[i] ?? \"transparent\";\n  });\n\n  // Flatten all datasets into a single array with dataset info\n  const transformedPoints: Array<ScatterPoint & { color: string; dataset: string }> = [];\n\n  data.forEach((dataset) => {\n    // Use only palette colors, ignore any hardcoded colors in datasets\n    const color = datasetColors[dataset.name] || \"transparent\";\n\n    dataset.data.forEach((point) => {\n      transformedPoints.push({\n        ...point,\n        x: Number(point.x),\n        y: Number(point.y),\n        z: point.z ? Number(point.z) : undefined,\n        color,\n        dataset: dataset.name,\n      });\n    });\n  });\n\n  return transformedPoints;\n};\n\n/**\n * Calculates the domain for scatter chart axes\n * @param data - The scatter chart data (array of datasets)\n * @param axis - Which axis ('x' or 'y')\n * @returns Domain array [min, max] with padding\n */\nexport const calculateScatterDomain = (\n  data: ScatterChartData,\n  axis: \"x\" | \"y\",\n): [number, number] => {\n  if (!data || !Array.isArray(data) || !data.length) return [0, 100];\n\n  // Flatten all data points from all datasets\n  const allPoints = data.flatMap((dataset) => dataset.data);\n\n  const values = allPoints.map((point) => Number(point[axis])).filter((val) => !isNaN(val));\n  if (!values.length) return [0, 100];\n\n  const min = Math.min(...values);\n  const max = Math.max(...values);\n  const padding = (max - min) * 0.1; // 10% padding\n\n  return [Math.max(0, min - padding), max + padding];\n};\n\n/**\n * Formats scatter chart data for tooltip display\n * @param dataKey - The data key being displayed\n * @param value - The value to format\n * @param unit - Optional unit to append\n * @returns Formatted string\n */\nexport const formatScatterTooltipValue = (value: number | string, unit?: string): string => {\n  const formattedValue = typeof value === \"number\" ? value.toLocaleString() : value;\n  return unit ? `${formattedValue} ${unit}` : formattedValue;\n};\n","import clsx from \"clsx\";\nimport React, { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { Cell, ScatterChart as RechartsScatterChart, Scatter, XAxis, YAxis } from \"recharts\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { ChartConfig, ChartContainer, ChartTooltip } from \"../Charts\";\nimport { SideBarChartData, SideBarTooltipProvider } from \"../context/SideBarTooltipContext\";\nimport { useExportChartData, useYAxisLabelWidth } from \"../hooks\";\nimport {\n  CustomTooltipContent,\n  DefaultLegend,\n  gridCartesianGrid,\n  SideBarTooltip,\n  SVGXAxisTick,\n  YAxisTick,\n} from \"../shared\";\nimport { LegendItem } from \"../types\";\nimport { get2dChartConfig, getLegendItems } from \"../utils/dataUtils\";\nimport { PaletteName, useChartPalette } from \"../utils/PalletUtils\";\nimport { numberTickFormatter } from \"../utils/styleUtils\";\nimport ScatterDot from \"./components/ScatterDot\";\nimport { ScatterChartData, ScatterPoint } from \"./types\";\nimport {\n  calculateScatterDomain,\n  getScatterDatasets,\n  transformScatterData,\n} from \"./utils/ScatterChartUtils\";\n\nexport interface ScatterChartProps {\n  data: ScatterChartData;\n  xAxisDataKey?: string;\n  yAxisDataKey?: string;\n  theme?: PaletteName;\n  customPalette?: string[];\n  grid?: boolean;\n  legend?: boolean;\n  isAnimationActive?: boolean;\n  xAxisLabel?: React.ReactNode;\n  yAxisLabel?: React.ReactNode;\n  className?: string;\n  height?: number | string;\n  width?: number | string;\n  shape?: \"circle\" | \"square\";\n}\n\nconst DEFAULT_CHART_HEIGHT = 296;\nconst X_AXIS_HEIGHT = 40;\n\nexport const ScatterChart = ({\n  data,\n  xAxisDataKey = \"x\",\n  yAxisDataKey = \"y\",\n  theme = \"ocean\",\n  customPalette,\n  grid = true,\n  xAxisLabel,\n  yAxisLabel,\n  legend = true,\n  isAnimationActive = false,\n  className,\n  height,\n  width,\n  shape = \"circle\",\n}: ScatterChartProps) => {\n  const printContext = usePrintContext();\n  isAnimationActive = printContext ? false : isAnimationActive;\n\n  const datasets = useMemo(() => {\n    return getScatterDatasets(data);\n  }, [data]);\n\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"lineChartPalette\",\n    dataLength: datasets.length,\n  });\n\n  const transformedData: ScatterPoint[] = useMemo(() => {\n    if (!data || !Array.isArray(data)) {\n      return [];\n    }\n    return transformScatterData(data, datasets, colors);\n  }, [data, datasets, colors]);\n\n  const { yAxisWidth, setLabelWidth } = useYAxisLabelWidth(transformedData, [yAxisDataKey]);\n\n  const chartConfig: ChartConfig = useMemo(() => {\n    return get2dChartConfig(\n      datasets,\n      colors,\n      datasets.reduce((acc, key) => ({ ...acc, [key]: key }), {}),\n      undefined,\n    );\n  }, [datasets, colors]);\n\n  const chartWrapperRef = useRef<HTMLDivElement>(null);\n  const legendContainerRef = useRef<HTMLDivElement>(null);\n  const xAxisContainerRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState<number>(0);\n  const [isSideBarTooltipOpen, setIsSideBarTooltipOpen] = useState(false);\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n  const [sideBarTooltipData, setSideBarTooltipData] = useState<SideBarChartData>({\n    title: \"\",\n    values: [],\n  });\n\n  const chartWidth = useMemo(() => {\n    if (!containerWidth) {\n      return undefined;\n    }\n    return containerWidth - yAxisWidth;\n  }, [containerWidth, yAxisWidth]);\n\n  const chartHeight = useMemo(() => {\n    const legendHeight = legendContainerRef.current?.offsetHeight ?? 0;\n    const xAxisHeight = xAxisContainerRef.current?.offsetHeight ?? 0;\n\n    if (typeof height === \"number\") {\n      return height - legendHeight - xAxisHeight;\n    }\n\n    if (typeof height === \"string\" && height.endsWith(\"px\")) {\n      const numericHeight = parseInt(height, 10);\n      if (!isNaN(numericHeight)) {\n        return numericHeight - legendHeight - xAxisHeight;\n      }\n    }\n\n    if (!height || !chartWrapperRef.current) {\n      return DEFAULT_CHART_HEIGHT;\n    }\n\n    return chartWrapperRef.current.offsetHeight - legendHeight - xAxisHeight;\n  }, [containerWidth, height]);\n\n  const isFixedNumericHeight = useMemo(() => {\n    if (typeof height === \"number\") return true;\n    if (typeof height === \"string\" && height.endsWith(\"px\")) return true;\n    return false;\n  }, [height]);\n\n  // Calculate domains for x and y axes\n  const xDomain = useMemo(() => {\n    return calculateScatterDomain(data, xAxisDataKey as \"x\" | \"y\");\n  }, [data, xAxisDataKey]);\n\n  const yDomain = useMemo(() => {\n    return calculateScatterDomain(data, yAxisDataKey as \"x\" | \"y\");\n  }, [data, yAxisDataKey]);\n\n  const renderDotShape = useMemo(() => {\n    return (props: unknown) => {\n      return <ScatterDot {...(props as object)} variant={shape} />;\n    };\n  }, [shape]);\n\n  useEffect(() => {\n    const chartElement = chartWrapperRef.current;\n\n    if (!chartElement) {\n      return;\n    }\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      for (const entry of entries) {\n        if (entry.target === chartElement) {\n          setContainerWidth(entry.contentRect.width);\n        }\n      }\n    });\n\n    resizeObserver.observe(chartElement);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, []);\n\n  useEffect(() => {\n    setIsSideBarTooltipOpen(false);\n    setIsLegendExpanded(false);\n  }, [datasets]);\n\n  const legendItems: LegendItem[] = useMemo(() => {\n    return getLegendItems(datasets, colors);\n  }, [datasets, colors]);\n\n  const exportData = useExportChartData({\n    type: \"scatter\",\n    data,\n    colors,\n    legend,\n    xAxisLabel,\n    yAxisLabel,\n    customDataTransform: () =>\n      data.map((dataset) => ({\n        name: dataset.name,\n        x: dataset.data.map((p) => p[xAxisDataKey] as number),\n        y: dataset.data.map((p) => p[yAxisDataKey] as number),\n      })),\n  });\n\n  const id = useId();\n\n  const xAxis = useMemo(() => {\n    return (\n      <div className=\"openui-scatter-chart-x-axis-container\" ref={xAxisContainerRef}>\n        <ChartContainer\n          config={chartConfig}\n          style={{ width: \"100%\", height: X_AXIS_HEIGHT }}\n          rechartsProps={{\n            height: X_AXIS_HEIGHT,\n          }}\n        >\n          <RechartsScatterChart\n            key={`x-axis-scatter-chart-${id}`}\n            data={transformedData}\n            margin={{\n              top: 10,\n              bottom: 0,\n              left: yAxisWidth,\n              right: 0,\n            }}\n          >\n            <XAxis\n              type=\"number\"\n              height={X_AXIS_HEIGHT}\n              name={xAxisLabel as string}\n              tickLine={false}\n              axisLine={false}\n              tickFormatter={numberTickFormatter}\n              tick={<SVGXAxisTick dy={10} />}\n              domain={xDomain}\n              dataKey={xAxisDataKey}\n            />\n            {/* Invisible scatter to maintain scale synchronization */}\n            <Scatter\n              data={transformedData}\n              fill=\"transparent\"\n              isAnimationActive={isAnimationActive}\n              shape=\"circle\"\n            />\n          </RechartsScatterChart>\n        </ChartContainer>\n      </div>\n    );\n  }, [\n    chartConfig,\n    transformedData,\n    id,\n    xDomain,\n    xAxisDataKey,\n    isAnimationActive,\n    xAxisLabel,\n    yAxisWidth,\n  ]);\n  const yAxis = useMemo(() => {\n    return (\n      <div className=\"openui-scatter-chart-y-axis-container\" style={{ height: chartHeight + 20 }}>\n        <RechartsScatterChart\n          key={`y-axis-scatter-chart-${id}`}\n          width={yAxisWidth}\n          height={chartHeight + 10}\n          data={transformedData}\n          margin={{\n            top: 10,\n            bottom: 12,\n            left: 0,\n            right: 0,\n          }}\n        >\n          <YAxis\n            type=\"number\"\n            width={yAxisWidth}\n            dataKey={yAxisDataKey}\n            name={yAxisLabel as string}\n            domain={yDomain}\n            tickLine={false}\n            axisLine={false}\n            tick={<YAxisTick setLabelWidth={setLabelWidth} />}\n            tickFormatter={numberTickFormatter}\n          />\n          {/* Invisible scatter to maintain scale synchronization */}\n          <Scatter\n            data={transformedData}\n            fill=\"transparent\"\n            isAnimationActive={isAnimationActive}\n            shape=\"circle\"\n          />\n        </RechartsScatterChart>\n      </div>\n    );\n  }, [\n    transformedData,\n    id,\n    yAxisWidth,\n    chartHeight,\n    yDomain,\n    yAxisDataKey,\n    yAxisLabel,\n    isAnimationActive,\n    setLabelWidth,\n  ]);\n  return (\n    <SideBarTooltipProvider\n      isSideBarTooltipOpen={isSideBarTooltipOpen}\n      setIsSideBarTooltipOpen={setIsSideBarTooltipOpen}\n      data={sideBarTooltipData}\n      setData={setSideBarTooltipData}\n    >\n      <div\n        className={clsx(\"openui-scatter-chart-container\", className)}\n        data-openui-chart={exportData}\n        style={{\n          width: typeof width === \"number\" ? `${width}px` : width || \"100%\",\n          height: isFixedNumericHeight ? \"auto\" : (height ?? \"auto\"),\n        }}\n        ref={chartWrapperRef}\n      >\n        <div className=\"openui-scatter-chart-container-inner\">\n          {yAxis}\n          <div\n            className=\"openui-scatter-chart-main-and-x-axis-container\"\n            style={{ width: chartWidth }}\n          >\n            <div\n              className=\"openui-scatter-chart-main-container\"\n              style={{\n                width: \"100%\",\n                height: chartHeight,\n              }}\n            >\n              <ChartContainer\n                config={chartConfig}\n                style={{\n                  width: \"100%\",\n                  height: \"100%\",\n                  aspectRatio: 0,\n                }}\n                rechartsProps={{\n                  width: \"100%\",\n                  height: \"100%\",\n                }}\n              >\n                <RechartsScatterChart\n                  key={`scatter-chart-${id}`}\n                  margin={{\n                    top: 10,\n                    right: 2,\n                    bottom: 2,\n                    left: 2,\n                  }}\n                >\n                  {grid && gridCartesianGrid({ horizontal: true, vertical: true })}\n                  <XAxis\n                    type=\"number\"\n                    name={xAxisLabel as string}\n                    domain={xDomain}\n                    dataKey={xAxisDataKey}\n                    hide\n                  />\n\n                  <YAxis\n                    type=\"number\"\n                    dataKey={yAxisDataKey}\n                    name={yAxisLabel as string}\n                    domain={yDomain}\n                    hide\n                  />\n\n                  <ChartTooltip\n                    content={\n                      <CustomTooltipContent\n                        parentRef={chartWrapperRef}\n                        hideIndicator\n                        labelKey=\"dataset\"\n                      />\n                    }\n                    offset={15}\n                  />\n\n                  <Scatter\n                    key={`scatter-${id}`}\n                    data={transformedData}\n                    shape={renderDotShape}\n                    isAnimationActive={isAnimationActive}\n                  >\n                    {transformedData.map((entry, index) => (\n                      <Cell key={`cell-${index}`} fill={entry[\"color\"] as string} />\n                    ))}\n                  </Scatter>\n                </RechartsScatterChart>\n              </ChartContainer>\n            </div>\n          </div>\n          {xAxis}\n          {isSideBarTooltipOpen && chartHeight > 0 && <SideBarTooltip height={chartHeight} />}\n        </div>\n        <div className=\"openui-scatter-chart-legend-container\" ref={legendContainerRef}>\n          {legend && (\n            <DefaultLegend\n              items={legendItems}\n              yAxisLabel={yAxisLabel}\n              xAxisLabel={xAxisLabel}\n              containerWidth={containerWidth}\n              isExpanded={isLegendExpanded}\n              setIsExpanded={setIsLegendExpanded}\n            />\n          )}\n        </div>\n      </div>\n    </SideBarTooltipProvider>\n  );\n};\n","import React from \"react\";\nimport { numberTickFormatter } from \"../../utils\";\n\ninterface ToolTipProps {\n  label: string;\n  color: string;\n  value: number | string;\n  percentage?: number;\n}\n\nexport const ToolTip: React.FC<ToolTipProps> = ({ label, color, value, percentage }) => {\n  return (\n    <div className=\"openui-chart-tooltip\">\n      <div className=\"openui-chart-tooltip-label\">{label}</div>\n      <div className=\"openui-chart-tooltip-content\">\n        <div className=\"openui-chart-tooltip-content-item\">\n          <div\n            className=\"openui-chart-tooltip-content-indicator openui-chart-tooltip-content-indicator--dot\"\n            style={{\n              [\"--color-bg\" as any]: color,\n              [\"--color-border\" as any]: color,\n            }}\n          />\n          <div className=\"openui-chart-tooltip-content-value-wrapper\">\n            <div className=\"openui-chart-tooltip-content-label\">\n              <span>Value</span>\n            </div>\n            <span className=\"openui-chart-tooltip-content-value\">\n              {typeof value === \"number\" ? numberTickFormatter(value) : value}\n            </span>\n          </div>\n        </div>\n        <div className=\"openui-chart-tooltip-content-item-separator\" />\n        <div className=\"openui-chart-tooltip-content-item\">\n          <div className=\"openui-chart-tooltip-content-value-wrapper\">\n            <div className=\"openui-chart-tooltip-content-label\">\n              <span>Percentage</span>\n            </div>\n            <span className=\"openui-chart-tooltip-content-value percentage\">\n              {typeof percentage === \"number\" ? `${percentage.toFixed(1)}%` : \"-\"}\n            </span>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n","import clsx from \"clsx\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { usePrintContext } from \"../../../context/PrintContext\";\nimport { Separator } from \"../../Separator\";\nimport { useExportChartData } from \"../hooks\";\nimport { DefaultLegend } from \"../shared/DefaultLegend/DefaultLegend\";\nimport { FloatingUIPortal } from \"../shared/PortalTooltip\";\nimport { StackedLegend } from \"../shared/StackedLegend/StackedLegend\";\nimport { LegendItem, StackedLegendItem } from \"../types\";\nimport { PaletteName, useChartPalette } from \"../utils/PalletUtils\";\nimport { ToolTip } from \"./components\";\nimport { SingleStackedBarData } from \"./types\";\n\nexport interface SingleStackedBarProps<T extends SingleStackedBarData> {\n  data: T;\n  categoryKey: keyof T[number];\n  dataKey: keyof T[number];\n  theme?: PaletteName;\n  customPalette?: string[];\n  legend?: boolean;\n  legendVariant?: \"default\" | \"stacked\";\n  className?: string;\n  style?: React.CSSProperties;\n  animated?: boolean;\n}\n\nexport const SingleStackedBar = <T extends SingleStackedBarData>({\n  data,\n  categoryKey,\n  dataKey,\n  theme = \"ocean\",\n  customPalette,\n  legend = true,\n  legendVariant = \"default\",\n  className,\n  style,\n  animated = true,\n}: SingleStackedBarProps<T>) => {\n  const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n  const [activeIndex, setActiveIndex] = useState<number | null>(null);\n  const [hoveredLegendKey, setHoveredLegendKey] = useState<string | null>(null);\n  const wrapperRef = useRef<HTMLDivElement>(null);\n  const [containerWidth, setContainerWidth] = useState(0);\n  const [tooltipPosition, setTooltipPosition] = useState<{ x: number; y: number } | null>(null);\n\n  useEffect(() => {\n    const wrapper = wrapperRef.current;\n    if (!wrapper) return;\n\n    const observer = new ResizeObserver((entries) => {\n      const entry = entries[0];\n      if (entry) {\n        setContainerWidth(entry.contentRect.width);\n      }\n    });\n\n    observer.observe(wrapper);\n    return () => observer.disconnect();\n  }, []);\n  // Calculate percentages\n  const segments = useMemo(() => {\n    if (!data || data.length === 0) {\n      return [];\n    }\n\n    const total = data.reduce((acc, item) => acc + Number(item[dataKey]), 0);\n\n    return data.map((item, index) => ({\n      value: Number(item[dataKey]),\n      category: String(item[categoryKey]),\n      index,\n      percentage: total > 0 ? (Number(item[dataKey]) / total) * 100 : 0,\n    }));\n  }, [data, dataKey, categoryKey]);\n\n  // Get theme colors for each segment\n  const colors = useChartPalette({\n    chartThemeName: theme,\n    customPalette,\n    themePaletteName: \"barChartPalette\",\n    dataLength: Math.max(segments.length, 1),\n  });\n\n  // Create legend items\n  const legendItems = useMemo((): LegendItem[] => {\n    return segments.map((segment, index) => ({\n      key: `${segment.category}-${index}`,\n      label: segment.category,\n      color: colors[index % colors.length] || \"\",\n      percentage: segment.percentage,\n    }));\n  }, [segments, colors]);\n\n  // Create stacked legend items with values\n  const stackedLegendItems = useMemo(\n    (): StackedLegendItem[] =>\n      segments.map((segment, index) => ({\n        key: `${segment.category}-${index}`,\n        label: segment.category,\n        value: segment.value,\n        color: colors[index % colors.length] || \"\",\n      })),\n    [segments, colors],\n  );\n\n  const printContext = usePrintContext();\n  animated = printContext ? false : animated;\n\n  const exportData = useExportChartData({\n    type: \"bar\",\n    data,\n    categoryKey: categoryKey as string,\n    dataKeys: [dataKey as string],\n    colors,\n    legend,\n    extraOptions: {\n      barDir: \"bar\",\n      barGrouping: \"stacked\",\n    },\n  });\n\n  // Handle legend item hover with tooltip positioning\n  const handleLegendItemHover = useCallback(\n    (hoverIndex: number | null) => {\n      setActiveIndex(hoverIndex);\n      if (hoverIndex !== null) {\n        const segment = segments[hoverIndex];\n        if (segment) {\n          const legendKey = `${segment.category}-${hoverIndex}`;\n          setHoveredLegendKey(legendKey);\n        }\n        // Try to position tooltip above the hovered segment\n        const segmentEl = wrapperRef.current?.querySelectorAll(\n          \".openui-single-stacked-bar-chart-segment\",\n        )?.[hoverIndex] as HTMLDivElement | undefined;\n        if (segmentEl) {\n          const rect = segmentEl.getBoundingClientRect();\n          const containerRect = wrapperRef.current?.getBoundingClientRect();\n          if (containerRect) {\n            const relativeX = rect.left + rect.width / 2 - containerRect.left;\n            const relativeY = rect.top - containerRect.top;\n            setTooltipPosition({ x: relativeX, y: relativeY });\n          } else {\n            setTooltipPosition({ x: rect.left + rect.width / 2, y: rect.top });\n          }\n        }\n      } else {\n        setHoveredLegendKey(null);\n        setTooltipPosition(null);\n      }\n    },\n    [segments],\n  );\n\n  // Segmented progress bar\n  return (\n    <div\n      ref={wrapperRef}\n      className={clsx(\"openui-single-stacked-bar-chart-container\", className, {\n        \"openui-single-stacked-bar-chart-container-gap\": legend && legendVariant === \"default\",\n      })}\n      style={style}\n      data-openui-chart={exportData}\n    >\n      <div className=\"openui-single-stacked-bar-chart\">\n        {segments.map((segment, index) => {\n          const isActive = activeIndex === null || activeIndex === index;\n          return (\n            <div\n              key={`segment-${index}`}\n              className={clsx(\"openui-single-stacked-bar-chart-segment\", {\n                \"openui-single-stacked-bar-chart-animated\": animated,\n              })}\n              style={{\n                width: `${segment.percentage}%`,\n                backgroundColor: colors[index % colors.length],\n                opacity: isActive ? 1 : 0.5,\n              }}\n              onMouseEnter={(e) => {\n                setActiveIndex(index);\n                const legendKey = `${segment.category}-${index}`;\n                setHoveredLegendKey(legendKey);\n                const rect = (e.currentTarget as HTMLDivElement).getBoundingClientRect();\n                const containerRect = wrapperRef.current?.getBoundingClientRect();\n                if (containerRect) {\n                  // Position relative to container so FloatingUIPortal aligns correctly\n                  const relativeX = rect.left + rect.width / 2 - containerRect.left;\n                  const relativeY = rect.top - containerRect.top;\n                  setTooltipPosition({ x: relativeX, y: relativeY });\n                } else {\n                  setTooltipPosition({ x: rect.left + rect.width / 2, y: rect.top });\n                }\n              }}\n              onMouseLeave={() => {\n                setActiveIndex(null);\n                setHoveredLegendKey(null);\n              }}\n            >\n              <div className=\"openui-single-stacked-bar-chart-segment-line\" />\n            </div>\n          );\n        })}\n      </div>\n      {activeIndex !== null && tooltipPosition && (\n        <FloatingUIPortal position={tooltipPosition} placement=\"top\" offsetDistance={10}>\n          <ToolTip\n            label={legendItems[activeIndex]?.label ?? \"\"}\n            color={stackedLegendItems[activeIndex]?.color ?? \"#000000\"}\n            value={stackedLegendItems[activeIndex]?.value ?? 0}\n            percentage={segments[activeIndex]?.percentage ?? 0}\n          />\n        </FloatingUIPortal>\n      )}\n\n      {legend && legendVariant === \"default\" && <Separator />}\n\n      {legend && legendVariant === \"default\" && (\n        <DefaultLegend\n          items={legendItems}\n          isExpanded={isLegendExpanded}\n          setIsExpanded={setIsLegendExpanded}\n          containerWidth={containerWidth}\n          style={{ paddingTop: 0 }}\n        />\n      )}\n      {legend && legendVariant === \"stacked\" && (\n        <StackedLegend\n          items={stackedLegendItems}\n          containerWidth={containerWidth}\n          onItemHover={setHoveredLegendKey}\n          activeKey={hoveredLegendKey}\n          onLegendItemHover={handleLegendItemHover}\n          separator\n          showTitle={false}\n          layout=\"showMore\"\n          className=\"openui-single-stacked-bar-chart-stacked-legend\"\n        />\n      )}\n    </div>\n  );\n};\n","import clsx from \"clsx\";\nimport React from \"react\";\nimport { CheckBoxItemProps } from \"../CheckBoxItem\";\n\ntype CheckBoxGroupVariant = \"clear\" | \"card\" | \"sunk\";\n\ninterface CheckBoxGroupProps {\n  children: React.ReactElement<CheckBoxItemProps> | React.ReactElement<CheckBoxItemProps>[];\n  className?: string;\n  style?: React.CSSProperties;\n  variant?: CheckBoxGroupVariant;\n}\n\nconst variantMap: Record<CheckBoxGroupVariant, string> = {\n  clear: \"openui-checkbox-group-clear\",\n  card: \"openui-checkbox-group-card\",\n  sunk: \"openui-checkbox-group-sunk\",\n};\n\nconst CheckBoxGroup = React.forwardRef<HTMLDivElement, CheckBoxGroupProps>((props, ref) => {\n  const { children, className, style, variant = \"clear\" } = props;\n  return (\n    <div\n      ref={ref}\n      className={clsx(\"openui-checkbox-group\", variantMap[variant], className)}\n      style={style}\n    >\n      {children}\n    </div>\n  );\n});\n\nCheckBoxGroup.displayName = \"CheckBoxGroup\";\n\nexport { CheckBoxGroup, type CheckBoxGroupProps };\n","import * as Checkbox from \"@radix-ui/react-checkbox\";\nimport clsx from \"clsx\";\nimport { CSSProperties, forwardRef, ReactNode, useId } from \"react\";\n\nexport interface CheckBoxItemProps {\n  label?: ReactNode;\n  description?: ReactNode;\n  className?: string;\n  style?: CSSProperties;\n  checked?: boolean;\n  defaultChecked?: boolean;\n  disabled?: boolean;\n  required?: boolean;\n  name?: string;\n  value?: string;\n  onChange?: (checked: boolean) => void;\n}\n\nconst CheckBoxItem = forwardRef<HTMLButtonElement, CheckBoxItemProps>((props, ref) => {\n  const { label, description, onChange, className, disabled, required, ...rest } = props;\n  const id = useId();\n  return (\n    <label htmlFor={id} className=\"openui-checkbox-item-container\">\n      <Checkbox.Root\n        {...rest}\n        ref={ref}\n        onCheckedChange={onChange}\n        id={id}\n        className={clsx(\"openui-checkbox-item-root\", className)}\n        disabled={disabled}\n        required={required}\n      >\n        <Checkbox.Indicator className=\"openui-checkbox-item-indicator\">\n          <svg\n            width=\"10\"\n            height=\"8\"\n            viewBox=\"0 0 10 8\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n          >\n            <path\n              d=\"M9 1L3.5 6.5L1 4\"\n              stroke=\"currentColor\"\n              strokeWidth=\"1.5\"\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n            />\n          </svg>\n        </Checkbox.Indicator>\n      </Checkbox.Root>\n      <div className=\"openui-checkbox-item-content\">\n        {label && (\n          <label htmlFor={id} className=\"openui-checkbox-item-label\">\n            {label}\n          </label>\n        )}\n        {description && <p className=\"openui-checkbox-item-description\">{description}</p>}\n      </div>\n    </label>\n  );\n});\n\nCheckBoxItem.displayName = \"CheckBoxItem\";\n\nexport { CheckBoxItem };\n","import clsx from \"clsx\";\nimport { CheckCheck, Copy } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { vscDarkPlus } from \"react-syntax-highlighter/dist/cjs/styles/prism\";\nimport { IconButton } from \"../IconButton\";\n\nexport interface CodeBlockProps {\n  language: string;\n  codeString: string;\n  theme?: {\n    [key: string]: React.CSSProperties;\n  };\n}\n\nexport const CodeBlock = ({ language, codeString, theme }: CodeBlockProps) => {\n  const [copied, setCopied] = useState(false);\n\n  const handleCopy = () => {\n    navigator.clipboard.writeText(codeString);\n    setCopied(true);\n    setTimeout(() => setCopied(false), 1000);\n  };\n\n  return (\n    <div className=\"openui-code-block-wrapper\">\n      <IconButton\n        onClick={handleCopy}\n        variant=\"secondary\"\n        size={\"small\"}\n        className={clsx(\"openui-code-block-copy-button\", {\n          \"openui-code-block-copy-button-copied\": copied,\n        })}\n        icon={copied ? <CheckCheck /> : <Copy />}\n        aria-label={copied ? \"Copied to clipboard\" : \"Copy code\"}\n      />\n      <SyntaxHighlighter\n        style={theme ?? vscDarkPlus}\n        language={language}\n        PreTag=\"div\"\n        className=\"openui-code-block-syntax-highlighter\"\n      >\n        {codeString}\n      </SyntaxHighlighter>\n    </div>\n  );\n};\n","import { createContext, useContext, useEffect, useRef } from \"react\";\nimport { create } from \"zustand\";\nimport { useShallow } from \"zustand/react/shallow\";\n\ninterface ShellState {\n  isSidebarOpen: boolean;\n  agentName: string;\n  logoUrl: string;\n  showAssistantLogo: boolean;\n  setIsSidebarOpen: (isOpen: boolean) => void;\n  setAgentName: (name: string) => void;\n  setLogoUrl: (url: string) => void;\n  setShowAssistantLogo: (show: boolean) => void;\n}\n\nexport const createShellStore = ({\n  logoUrl,\n  agentName,\n  showAssistantLogo,\n}: {\n  logoUrl: string;\n  agentName: string;\n  showAssistantLogo: boolean;\n}) =>\n  create<ShellState>((set) => ({\n    isSidebarOpen: true,\n    agentName: agentName,\n    logoUrl: logoUrl,\n    showAssistantLogo,\n    setIsSidebarOpen: (isOpen: boolean) => set({ isSidebarOpen: isOpen }),\n    setAgentName: (name: string) => set({ agentName: name }),\n    setLogoUrl: (url: string) => set({ logoUrl: url }),\n    setShowAssistantLogo: (show: boolean) => set({ showAssistantLogo: show }),\n  }));\n\nexport const ShellStoreContext = createContext<ReturnType<typeof createShellStore> | null>(null);\n\nexport const useShellStore = <T,>(selector: (state: ShellState) => T): T => {\n  const store = useContext(ShellStoreContext);\n  if (!store) {\n    throw new Error(\"useShellStore must be used within ShellStoreProvider\");\n  }\n\n  return store(useShallow(selector));\n};\n\nexport const ShellStoreProvider = ({\n  children,\n  agentName,\n  logoUrl,\n  showAssistantLogo = false,\n}: {\n  children: React.ReactNode;\n  logoUrl: string;\n  agentName: string;\n  showAssistantLogo?: boolean;\n}) => {\n  const shellStoreRef = useRef<ReturnType<typeof createShellStore> | null>(null);\n  if (!shellStoreRef.current) {\n    shellStoreRef.current = createShellStore({ agentName, logoUrl, showAssistantLogo });\n  }\n  const shellStore = shellStoreRef.current;\n\n  useEffect(() => {\n    const { setAgentName, setLogoUrl, setShowAssistantLogo } = shellStore.getState();\n    setAgentName(agentName);\n    setLogoUrl(logoUrl);\n    setShowAssistantLogo(showAssistantLogo);\n  }, [agentName, logoUrl, shellStore, showAssistantLogo]);\n\n  return <ShellStoreContext.Provider value={shellStore}>{children}</ShellStoreContext.Provider>;\n};\n","import clsx from \"clsx\";\nimport { LayoutContextProvider } from \"../../context/LayoutContext\";\nimport { ShellStoreProvider } from \"../_shared/store\";\n\ninterface ContainerProps {\n  children?: React.ReactNode;\n  logoUrl: string;\n  agentName: string;\n  className?: string;\n  showAssistantLogo?: boolean;\n}\n\nexport const Container = ({\n  children,\n  logoUrl,\n  agentName,\n  className,\n  showAssistantLogo = false,\n}: ContainerProps) => {\n  return (\n    <ShellStoreProvider\n      logoUrl={logoUrl}\n      agentName={agentName}\n      showAssistantLogo={showAssistantLogo}\n    >\n      <LayoutContextProvider layout=\"tray\">\n        <div className={clsx(\"openui-copilot-shell-container\", className)}>{children}</div>\n      </LayoutContextProvider>\n    </ShellStoreProvider>\n  );\n};\n","import { Message } from \"@openuidev/react-headless\";\n\nexport const isChatEmpty = ({\n  isLoadingMessages,\n  messages,\n}: {\n  isLoadingMessages: boolean | undefined;\n  messages: Message[];\n}) => {\n  return !isLoadingMessages && messages.length === 0;\n};\n","import { useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ArrowUp, Lightbulb } from \"lucide-react\";\nimport { Fragment, ReactNode, isValidElement } from \"react\";\nimport { ConversationStarterIcon, ConversationStarterProps } from \"../../types/ConversationStarter\";\nimport { Carousel, CarouselContent } from \"../Carousel\";\nimport { isChatEmpty } from \"../_shared/utils\";\n\nexport type ConversationStarterVariant = \"short\" | \"long\";\n\ninterface ConversationStarterItemProps extends ConversationStarterProps {\n  onClick: (prompt: string) => void;\n  variant: ConversationStarterVariant;\n}\n\n/**\n * Renders the appropriate icon based on the icon prop value\n * - undefined: Show default lightbulb icon\n * - ReactNode: Show the provided icon (use <></> or React.Fragment for no icon)\n */\nconst renderIcon = (icon: ConversationStarterIcon | undefined): ReactNode => {\n  if (icon === undefined) {\n    return <Lightbulb size={16} />;\n  }\n  return icon;\n};\n\nconst hasRenderableIcon = (icon: ReactNode): boolean => {\n  if (icon === null || icon === undefined || icon === false) {\n    return false;\n  }\n\n  if (isValidElement<{ children?: ReactNode }>(icon) && icon.type === Fragment) {\n    return Boolean(icon.props.children);\n  }\n\n  return true;\n};\n\nconst ConversationStarterItem = ({\n  displayText,\n  prompt,\n  onClick,\n  variant,\n  icon,\n}: ConversationStarterItemProps) => {\n  const renderedIcon = renderIcon(icon);\n  const shouldRenderIcon = hasRenderableIcon(renderedIcon);\n\n  if (variant === \"short\") {\n    return (\n      <button\n        type=\"button\"\n        className=\"openui-copilot-shell-conversation-starter-item-short\"\n        onClick={() => onClick(prompt)}\n      >\n        {shouldRenderIcon && (\n          <span className=\"openui-copilot-shell-conversation-starter-item-short__icon\">\n            {renderedIcon}\n          </span>\n        )}\n        <span className=\"openui-copilot-shell-conversation-starter-item-short__text\">\n          {displayText}\n        </span>\n      </button>\n    );\n  }\n\n  // Long variant (detailed list style)\n  return (\n    <button\n      type=\"button\"\n      className=\"openui-copilot-shell-conversation-starter-item-long\"\n      onClick={() => onClick(prompt)}\n    >\n      <div className=\"openui-copilot-shell-conversation-starter-item-long__content\">\n        {shouldRenderIcon && (\n          <span className=\"openui-copilot-shell-conversation-starter-item-long__icon\">\n            {renderedIcon}\n          </span>\n        )}\n        <span className=\"openui-copilot-shell-conversation-starter-item-long__text\">\n          {displayText}\n        </span>\n      </div>\n      <span className=\"openui-copilot-shell-conversation-starter-item-long__arrow\">\n        <ArrowUp size={16} />\n      </span>\n    </button>\n  );\n};\n\nexport interface ConversationStarterContainerProps {\n  starters: ConversationStarterProps[];\n  className?: string;\n  /**\n   * Variant of the conversation starter\n   * - \"short\": Pill-style horizontal buttons (default)\n   * - \"long\": List items with icons and hover arrow\n   */\n  variant?: ConversationStarterVariant;\n}\n\nexport const ConversationStarter = ({\n  starters,\n  className,\n  variant = \"short\",\n}: ConversationStarterContainerProps) => {\n  const processMessage = useThread((s) => s.processMessage);\n  const isRunning = useThread((s) => s.isRunning);\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  const handleClick = (prompt: string) => {\n    if (isRunning) return;\n    processMessage({\n      role: \"user\",\n      content: prompt,\n    });\n  };\n\n  // Only show when there are no messages\n  if (!isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  if (starters.length === 0) {\n    return null;\n  }\n\n  if (variant === \"short\") {\n    return (\n      <Carousel\n        showButtons={false}\n        className={clsx(\n          \"openui-copilot-shell-conversation-starter\",\n          \"openui-copilot-shell-conversation-starter--short\",\n          className,\n        )}\n      >\n        <CarouselContent className=\"openui-copilot-shell-conversation-starter__carousel-content\">\n          {starters.map((item, index) => (\n            <ConversationStarterItem\n              key={`${item.displayText}-${index}`}\n              displayText={item.displayText}\n              prompt={item.prompt}\n              icon={item.icon}\n              onClick={handleClick}\n              variant={variant}\n            />\n          ))}\n        </CarouselContent>\n      </Carousel>\n    );\n  }\n\n  return (\n    <div\n      className={clsx(\n        \"openui-copilot-shell-conversation-starter\",\n        `openui-copilot-shell-conversation-starter--${variant}`,\n        className,\n      )}\n    >\n      {starters.map((item, index) => (\n        <Fragment key={`${item.displayText}-${index}`}>\n          <ConversationStarterItem\n            displayText={item.displayText}\n            prompt={item.prompt}\n            icon={item.icon}\n            onClick={handleClick}\n            variant={variant}\n          />\n        </Fragment>\n      ))}\n    </div>\n  );\n};\n\nexport default ConversationStarter;\n","import { useThreadList } from \"@openuidev/react-headless\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport clsx from \"clsx\";\nimport { EllipsisVerticalIcon, MenuIcon, Trash2Icon } from \"lucide-react\";\nimport { useEffect } from \"react\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { useTheme } from \"../ThemeProvider\";\n\nconst ThreadItem = ({\n  title,\n  isSelected,\n  onSelect,\n  onDelete,\n}: {\n  title: string;\n  isSelected: boolean;\n  onSelect: () => void;\n  onDelete: () => void;\n}) => {\n  const { portalThemeClassName } = useTheme();\n  return (\n    <div\n      className={clsx(\"openui-copilot-shell-thread-item\", {\n        \"openui-copilot-shell-thread-item--selected\": isSelected,\n      })}\n    >\n      <button className=\"openui-copilot-shell-thread-item-title\" onClick={onSelect}>\n        {title}\n      </button>\n      <DropdownMenu.Root>\n        <DropdownMenu.Trigger asChild>\n          <IconButton\n            icon={<EllipsisVerticalIcon size=\"1em\" />}\n            aria-label={`More actions for ${title}`}\n            variant=\"tertiary\"\n            size=\"extra-small\"\n            className=\"openui-copilot-shell-thread-item-menu-trigger\"\n          />\n        </DropdownMenu.Trigger>\n        <DropdownMenu.Portal>\n          <DropdownMenu.Content\n            className={clsx(\"openui-copilot-shell-thread-item-menu\", portalThemeClassName)}\n            side=\"right\"\n            align=\"start\"\n            sideOffset={4}\n          >\n            <DropdownMenu.Item\n              asChild\n              onSelect={(e) => {\n                e.stopPropagation();\n                onDelete();\n              }}\n            >\n              <Button\n                type=\"button\"\n                variant=\"tertiary\"\n                buttonType=\"destructive\"\n                size=\"small\"\n                iconLeft={<Trash2Icon size={14} />}\n                className=\"openui-copilot-shell-thread-item-menu-action\"\n              >\n                Delete\n              </Button>\n            </DropdownMenu.Item>\n          </DropdownMenu.Content>\n        </DropdownMenu.Portal>\n      </DropdownMenu.Root>\n    </div>\n  );\n};\n\nexport const ThreadListContainer = () => {\n  const threads = useThreadList((s) => s.threads);\n  const selectedThreadId = useThreadList((s) => s.selectedThreadId);\n  const loadThreads = useThreadList((s) => s.loadThreads);\n  const selectThread = useThreadList((s) => s.selectThread);\n  const deleteThread = useThreadList((s) => s.deleteThread);\n  const { portalThemeClassName } = useTheme();\n\n  useEffect(() => {\n    loadThreads();\n  }, [loadThreads]);\n\n  return (\n    <DropdownMenu.Root>\n      <DropdownMenu.Trigger asChild>\n        <IconButton\n          icon={<MenuIcon size=\"1em\" />}\n          variant=\"tertiary\"\n          aria-label=\"Thread list\"\n          className=\"openui-copilot-shell-thread-list-trigger\"\n        />\n      </DropdownMenu.Trigger>\n      <DropdownMenu.Portal>\n        <DropdownMenu.Content\n          className={clsx(\"openui-copilot-shell-thread-list-dropdown\", portalThemeClassName)}\n          side=\"bottom\"\n          align=\"end\"\n          sideOffset={8}\n        >\n          <div className=\"openui-copilot-shell-thread-list-header\">All threads</div>\n          <div className=\"openui-copilot-shell-thread-list-items\">\n            {threads.map((thread) => (\n              <ThreadItem\n                key={thread.id}\n                title={thread.title}\n                isSelected={selectedThreadId === thread.id}\n                onSelect={() => selectThread(thread.id)}\n                onDelete={() => deleteThread(thread.id)}\n              />\n            ))}\n            {threads.length === 0 && (\n              <div className=\"openui-copilot-shell-thread-list-empty\">No threads yet</div>\n            )}\n          </div>\n        </DropdownMenu.Content>\n      </DropdownMenu.Portal>\n    </DropdownMenu.Root>\n  );\n};\n","import { useThreadList } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { SquarePen } from \"lucide-react\";\nimport { ReactNode } from \"react\";\nimport { IconButton } from \"../IconButton\";\nimport { useShellStore } from \"../_shared/store\";\nimport { ThreadListContainer } from \"./ThreadListContainer\";\n\nexport const CopilotNewChatButton = () => {\n  const switchToNewThread = useThreadList((s) => s.switchToNewThread);\n\n  return (\n    <IconButton\n      icon={<SquarePen size=\"1em\" />}\n      onClick={switchToNewThread}\n      variant=\"tertiary\"\n      aria-label=\"New chat\"\n      className=\"openui-copilot-shell-header-new-chat-button\"\n    />\n  );\n};\n\ninterface HeaderProps {\n  className?: string;\n  /** Custom content to render on the rightmost side of the logo container */\n  rightChildren?: ReactNode;\n  /** Hide the new chat button */\n  hideNewChatButton?: boolean;\n  /** Hide the thread list container */\n  hideThreadListContainer?: boolean;\n}\n\nexport const Header = ({\n  className,\n  rightChildren,\n  hideNewChatButton = false,\n  hideThreadListContainer = false,\n}: HeaderProps) => {\n  const { logoUrl, agentName } = useShellStore((state) => ({\n    logoUrl: state.logoUrl,\n    agentName: state.agentName,\n  }));\n\n  const shouldRenderActions = rightChildren || !hideThreadListContainer || !hideNewChatButton;\n\n  return (\n    <div className={clsx(\"openui-copilot-shell-header\", className)}>\n      <div className=\"openui-copilot-shell-header-logo-container\">\n        <img className=\"openui-copilot-shell-header-logo\" src={logoUrl} alt=\"Logo\" />\n        <span className=\"openui-copilot-shell-header-agent-name\">{agentName}</span>\n      </div>\n      {shouldRenderActions && (\n        <div className=\"openui-copilot-shell-header-actions\">\n          {rightChildren}\n          {!hideThreadListContainer && <ThreadListContainer />}\n          {!hideNewChatButton && <CopilotNewChatButton />}\n        </div>\n      )}\n    </div>\n  );\n};\n","\"use client\";\n\nimport { RefObject, useCallback, useEffect, useRef } from \"react\";\n\nexport type ScrollVariant = \"always\" | \"once\" | \"user-message-anchor\";\nexport const useScrollToBottom = <T extends HTMLElement | null, L extends { id: string }>({\n  ref,\n  lastMessage,\n  scrollVariant,\n  userMessageSelector = \".openui-shell-thread-message-user\",\n  isRunning,\n  isLoadingMessages,\n}: {\n  ref: RefObject<T>;\n  // scroll to bottom when this value changes\n  lastMessage: L;\n  scrollVariant: ScrollVariant;\n  userMessageSelector?: string;\n  // if true, scroll to bottom logic will work\n  isRunning?: boolean;\n  isLoadingMessages?: boolean;\n}) => {\n  const previousLastMessage = useRef<L | null>(null);\n  const lastUserMessage = useRef<HTMLElement | null>(null);\n  const hasUserScrolledWhenIsRunning = useRef(false);\n  const wasScrolledToBottomAfterLoading = useRef(false);\n\n  useEffect(() => {\n    const element = ref.current;\n    if (!isRunning || !element) {\n      hasUserScrolledWhenIsRunning.current = false;\n      return;\n    }\n    let isUserScrolling = false;\n\n    const userScrollingDisabler = () => {\n      isUserScrolling = false;\n    };\n\n    const userScrollingEnabler = () => {\n      isUserScrolling = true;\n    };\n\n    const scrollListener = () => {\n      if (!isUserScrolling) {\n        return;\n      }\n      hasUserScrolledWhenIsRunning.current = true;\n      removeListeners();\n    };\n\n    const addListeners = () => {\n      element.addEventListener(\"scroll\", scrollListener);\n      element.addEventListener(\"click\", userScrollingDisabler);\n      element.addEventListener(\"touchmove\", userScrollingEnabler);\n      element.addEventListener(\"wheel\", userScrollingEnabler);\n      element.addEventListener(\"keydown\", userScrollingEnabler);\n      element.addEventListener(\"mousedown\", userScrollingEnabler);\n    };\n\n    const removeListeners = () => {\n      element.removeEventListener(\"scroll\", scrollListener);\n      element.removeEventListener(\"click\", userScrollingDisabler);\n      element.removeEventListener(\"touchmove\", userScrollingEnabler);\n      element.removeEventListener(\"wheel\", userScrollingEnabler);\n      element.removeEventListener(\"keydown\", userScrollingEnabler);\n      element.removeEventListener(\"mousedown\", userScrollingEnabler);\n    };\n\n    addListeners();\n\n    return () => {\n      removeListeners();\n    };\n  }, [isRunning]);\n\n  const scrollToBottom = useCallback(() => {\n    const element = ref.current;\n    if (!element) {\n      return;\n    }\n\n    if (scrollVariant === \"always\") {\n      if (previousLastMessage.current !== lastMessage) {\n        const scrollBy = element.scrollHeight - element.scrollTop - element.clientHeight;\n        if (scrollBy > 90) {\n          element.scrollTo({\n            top: element.scrollHeight,\n            behavior: \"smooth\",\n          });\n        } else {\n          element.scrollTop = element.scrollHeight;\n        }\n      }\n    } else if (scrollVariant === \"once\") {\n      if (previousLastMessage.current?.id !== lastMessage.id) {\n        element.scrollTo({\n          top: element.scrollHeight,\n          behavior: \"smooth\",\n        });\n      }\n    } else {\n      const lastUserMessageDiv = Array.from(element.querySelectorAll(userMessageSelector)).pop() as\n        | HTMLElement\n        | undefined;\n      const lastUserMessageNextSibling = lastUserMessageDiv?.nextElementSibling;\n      if (\n        lastUserMessageDiv &&\n        (!lastUserMessageNextSibling?.nextElementSibling ||\n          !wasScrolledToBottomAfterLoading.current) &&\n        previousLastMessage.current?.id !== lastMessage.id\n      ) {\n        const scrollPaddingTop =\n          Number.parseFloat(window.getComputedStyle(element).scrollPaddingTop || \"0\") || 0;\n\n        // scroll to last user message till there is only 1 more message\n        const scrollPosition =\n          lastUserMessageDiv.getBoundingClientRect().top -\n          element.getBoundingClientRect().top +\n          element.scrollTop -\n          scrollPaddingTop;\n\n        element.scrollTo({ top: Math.max(scrollPosition, 0), behavior: \"smooth\" });\n        lastUserMessage.current = lastUserMessageDiv;\n      }\n    }\n\n    previousLastMessage.current = lastMessage;\n  }, [ref, lastMessage, scrollVariant, userMessageSelector]);\n\n  useEffect(() => {\n    if (\n      (isRunning && !hasUserScrolledWhenIsRunning.current) || // scroll to bottom if user hasn't scrolled when isRunning is true\n      (!wasScrolledToBottomAfterLoading.current && !isLoadingMessages) // scroll to bottom once when messages are loaded\n    ) {\n      scrollToBottom();\n      wasScrolledToBottomAfterLoading.current = true;\n    }\n\n    if (isLoadingMessages) {\n      wasScrolledToBottomAfterLoading.current = false;\n    }\n  }, [scrollToBottom, isRunning, isLoadingMessages]);\n};\n","import clsx from \"clsx\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { IconButton } from \"../IconButton\";\n\ntype TableAlignment = \"left\" | \"center\" | \"right\";\n\nconst alignmentClasses: Record<TableAlignment, string> = {\n  left: \"openui-table-align-left\",\n  center: \"openui-table-align-center\",\n  right: \"openui-table-align-right\",\n};\n\n// ─── Primitives ───\n\nconst Table = React.forwardRef<\n  HTMLTableElement,\n  React.HTMLAttributes<HTMLTableElement> & {\n    containerRef?: React.RefObject<HTMLDivElement>;\n    containerClassName?: string;\n    containerStyle?: React.CSSProperties;\n  }\n>(({ className, containerRef, containerClassName, containerStyle, ...props }, ref) => (\n  <div\n    ref={containerRef}\n    className={clsx(\"openui-table-container\", containerClassName)}\n    style={containerStyle}\n  >\n    <table ref={ref} className={clsx(\"openui-table\", className)} {...props} />\n  </div>\n));\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<\n  HTMLTableSectionElement,\n  React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n  <thead ref={ref} className={clsx(\"openui-table-header\", className)} {...props} />\n));\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<\n  HTMLTableSectionElement,\n  React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n  <tbody ref={ref} className={clsx(\"openui-table-body\", className)} {...props} />\n));\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<\n  HTMLTableSectionElement,\n  React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n  <tfoot ref={ref} className={clsx(\"openui-table-footer\", className)} {...props} />\n));\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n  ({ className, ...props }, ref) => (\n    <tr ref={ref} className={clsx(\"openui-table-row\", className)} {...props} />\n  ),\n);\nTableRow.displayName = \"TableRow\";\n\nexport interface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n  icon?: React.ReactNode;\n  align?: TableAlignment;\n}\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n  ({ className, children, icon, align, ...props }, ref) => (\n    <th ref={ref} className={clsx(\"openui-table-head\", className)} {...props}>\n      <div className={clsx(\"openui-table-head-content\", align && alignmentClasses[align])}>\n        {icon && <div className=\"openui-table-head-icon\">{icon}</div>}\n        <div className=\"openui-table-head-label\">{children}</div>\n      </div>\n    </th>\n  ),\n);\nTableHead.displayName = \"TableHead\";\n\nexport interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n  align?: TableAlignment;\n}\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n  ({ className, align, ...props }, ref) => (\n    <td\n      ref={ref}\n      className={clsx(\"openui-table-cell\", align && alignmentClasses[align], className)}\n      {...props}\n    />\n  ),\n);\nTableCell.displayName = \"TableCell\";\n\n// ─── ScrollableTable ───\n\nexport interface ScrollableTableProps extends React.HTMLAttributes<HTMLTableElement> {\n  containerClassName?: string;\n  containerStyle?: React.CSSProperties;\n}\n\nconst ScrollableTable = React.forwardRef<HTMLTableElement, ScrollableTableProps>(\n  ({ className, containerClassName, containerStyle, children, ...tableProps }, ref) => {\n    const wrapperRef = useRef<HTMLDivElement>(null);\n    const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n    const [isScrollable, setIsScrollable] = useState(false);\n    const [canScrollLeft, setCanScrollLeft] = useState(false);\n    const [canScrollRight, setCanScrollRight] = useState(false);\n    const columnLeftsRef = useRef<number[]>([]);\n\n    useEffect(() => {\n      const container = scrollContainerRef.current;\n      const wrapper = wrapperRef.current;\n      if (!container || !wrapper) return;\n\n      const compute = () => {\n        const scrollable = container.scrollWidth > container.clientWidth;\n        setIsScrollable(scrollable);\n        setCanScrollLeft(container.scrollLeft > 0);\n        setCanScrollRight(container.scrollLeft < container.scrollWidth - container.clientWidth - 1);\n\n        const ths = wrapper.querySelectorAll<HTMLTableCellElement>(\"thead th\");\n        if (!ths || ths.length === 0) {\n          columnLeftsRef.current = [];\n          return;\n        }\n        const containerRect = container.getBoundingClientRect();\n        const lefts: number[] = [];\n        ths.forEach((th) => {\n          const rect = th.getBoundingClientRect();\n          const left = rect.left - containerRect.left + container.scrollLeft;\n          lefts.push(Math.max(0, Math.round(left)));\n        });\n        columnLeftsRef.current = Array.from(new Set(lefts)).sort((a, b) => a - b);\n      };\n\n      compute();\n\n      const ro = new ResizeObserver(() => compute());\n      ro.observe(container);\n\n      const onScroll = () => {\n        setCanScrollLeft(container.scrollLeft > 0);\n        setCanScrollRight(container.scrollLeft < container.scrollWidth - container.clientWidth - 1);\n      };\n      container.addEventListener(\"scroll\", onScroll);\n\n      return () => {\n        ro.disconnect();\n        container.removeEventListener(\"scroll\", onScroll);\n      };\n    }, [children]);\n\n    const scrollToNextColumn = useCallback(() => {\n      const container = scrollContainerRef.current;\n      if (!container || columnLeftsRef.current.length === 0) return;\n      const current = container.scrollLeft;\n      const target = columnLeftsRef.current.find((l) => l > current + 1);\n      const maxScroll = container.scrollWidth - container.clientWidth;\n      const next = typeof target === \"number\" ? target : maxScroll;\n      container.scrollTo({ left: Math.min(next, maxScroll), behavior: \"smooth\" });\n    }, []);\n\n    const scrollToPrevColumn = useCallback(() => {\n      const container = scrollContainerRef.current;\n      if (!container || columnLeftsRef.current.length === 0) return;\n      const current = container.scrollLeft;\n      const prevs = columnLeftsRef.current.filter((l) => l < current - 1);\n      const prev = prevs.at(-1) ?? 0;\n      container.scrollTo({ left: Math.max(0, prev), behavior: \"smooth\" });\n    }, []);\n\n    return (\n      <div className=\"openui-scrollable-table-wrapper\" ref={wrapperRef} tabIndex={0}>\n        {isScrollable && (\n          <>\n            <div\n              className={clsx(\n                \"openui-scrollable-table-control\",\n                \"openui-scrollable-table-control-left\",\n                !canScrollLeft && \"openui-scrollable-table-control-disabled\",\n              )}\n            >\n              <IconButton\n                aria-label=\"Scroll left\"\n                size=\"small\"\n                variant=\"secondary\"\n                onClick={scrollToPrevColumn}\n                disabled={!canScrollLeft}\n                icon={<ChevronLeft size={16} />}\n              />\n            </div>\n            <div\n              className={clsx(\n                \"openui-scrollable-table-control\",\n                \"openui-scrollable-table-control-right\",\n                !canScrollRight && \"openui-scrollable-table-control-disabled\",\n              )}\n            >\n              <IconButton\n                aria-label=\"Scroll right\"\n                size=\"small\"\n                variant=\"secondary\"\n                onClick={scrollToNextColumn}\n                disabled={!canScrollRight}\n                icon={<ChevronRight size={16} />}\n              />\n            </div>\n          </>\n        )}\n        <Table\n          ref={ref}\n          containerRef={scrollContainerRef as React.RefObject<HTMLDivElement>}\n          containerClassName={clsx(\"openui-scrollable-table-scroll-container\", containerClassName)}\n          containerStyle={containerStyle}\n          className={className}\n          style={{ width: isScrollable ? \"max-content\" : \"100%\" }}\n          {...tableProps}\n        >\n          {children}\n        </Table>\n      </div>\n    );\n  },\n);\nScrollableTable.displayName = \"ScrollableTable\";\n\nexport {\n  ScrollableTable,\n  Table,\n  TableBody,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n};\n","import clsx from \"clsx\";\nimport { memo } from \"react\";\nimport ReactMarkdown, { Components, type Options } from \"react-markdown\";\nimport { oneLight, vscDarkPlus } from \"react-syntax-highlighter/dist/cjs/styles/prism\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableCellProps,\n  TableHead,\n  TableHeadProps,\n  TableHeader,\n  TableRow,\n} from \"../Table\";\nimport { useTheme } from \"../ThemeProvider\";\n\ntype TableAlignment = TableHeadProps[\"align\"];\n\nfunction toTableAlignment(align: string | undefined): TableAlignment {\n  if (align === \"left\" || align === \"center\" || align === \"right\") return align;\n  return undefined;\n}\n\nconst MarkdownTableHead: Components[\"th\"] = ({ align, ...props }) => (\n  <TableHead {...(props as Omit<TableHeadProps, \"align\">)} align={toTableAlignment(align)} />\n);\n\nconst MarkdownTableCell: Components[\"td\"] = ({ align, ...props }) => (\n  <TableCell {...(props as Omit<TableCellProps, \"align\">)} align={toTableAlignment(align)} />\n);\n\nconst variantStyles = {\n  clear: \"\",\n  card: \"openui-markdown-renderer-card\",\n  sunk: \"openui-markdown-renderer-card-sunk\",\n};\n\nexport interface MarkDownRendererProps {\n  variant?: \"clear\" | \"card\" | \"sunk\";\n  textMarkdown: string;\n  options?: Options;\n  className?: string;\n}\n\nexport const MarkDownRenderer = memo((props: MarkDownRendererProps) => {\n  const { mode } = useTheme();\n  const theme = mode === \"dark\" ? vscDarkPlus : oneLight;\n  const components: Components = {\n    code({ className, children, ...props }) {\n      const match = /language-(\\w+)/.exec(className || \"\");\n\n      if (match || (!className && String(children).includes(\"\\n\"))) {\n        const language = match?.[1] ?? \"text\";\n        const codeString = String(children).trim();\n        return <CodeBlock language={language} codeString={codeString} theme={theme} />;\n      }\n\n      return (\n        <code className={clsx(\"openui-markdown-renderer-code\", className)} {...props}>\n          {children}\n        </code>\n      );\n    },\n    a({ href, children, ...props }) {\n      return (\n        <a\n          href={href}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          className=\"openui-markdown-renderer-link\"\n          {...props}\n        >\n          {children}\n        </a>\n      );\n    },\n    table: Table,\n    thead: TableHeader,\n    th: MarkdownTableHead,\n    tbody: TableBody,\n    tr: TableRow,\n    td: MarkdownTableCell,\n  };\n\n  const markdownProps = {\n    ...props.options,\n    components: { ...components, ...props.options?.components },\n  };\n\n  return (\n    <div\n      className={clsx(\n        props[\"variant\"] && variantStyles[props[\"variant\"] as keyof typeof variantStyles],\n        \"openui-markdown-renderer\",\n        props.className,\n      )}\n    >\n      <ReactMarkdown {...markdownProps}>{props.textMarkdown}</ReactMarkdown>\n    </div>\n  );\n});\n","import clsx from \"clsx\";\n\nexport const MessageLoading = ({ className }: { className?: string }) => {\n  return (\n    <div\n      className={clsx(\"openui-message-loading-container\", className)}\n      role=\"status\"\n      aria-live=\"polite\"\n      aria-label=\"Loading message\"\n    >\n      <div className=\"openui-message-loading\" />\n    </div>\n  );\n};\n","import { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport interface BehindTheScenesProps {\n  /** True while the overall message is still streaming */\n  isStreaming?: boolean;\n  /** True once all tool calls have received their arguments back */\n  toolCallsComplete?: boolean;\n  children: React.ReactNode;\n}\n\nexport const BehindTheScenes = ({\n  isStreaming,\n  toolCallsComplete,\n  children,\n}: BehindTheScenesProps) => {\n  // null = auto-managed, boolean = user override\n  const [userOverride, setUserOverride] = useState<boolean | null>(null);\n  // Once tools complete, latch closed — never auto-open again for this message\n  const hasCompletedOnce = useRef(false);\n  const prevStreaming = useRef(isStreaming);\n\n  // Reset everything when a new streaming session starts\n  useEffect(() => {\n    if (isStreaming && !prevStreaming.current) {\n      setUserOverride(null);\n      hasCompletedOnce.current = false;\n    }\n    prevStreaming.current = isStreaming;\n  }, [isStreaming]);\n\n  // Latch: once tool calls complete, remember it forever for this session\n  if (toolCallsComplete && !hasCompletedOnce.current) {\n    hasCompletedOnce.current = true;\n  }\n\n  const toolsActive = !!isStreaming && !hasCompletedOnce.current;\n  const autoExpanded = toolsActive;\n  const isExpanded = userOverride !== null ? userOverride : autoExpanded;\n\n  const toggle = () => {\n    setUserOverride((prev) => (prev !== null ? !prev : !isExpanded));\n  };\n\n  return (\n    <div className=\"openui-behind-the-scenes\">\n      <button className=\"openui-behind-the-scenes__toggle\" onClick={toggle} type=\"button\">\n        {isExpanded ? (\n          <ChevronUp size={14} className=\"openui-behind-the-scenes__toggle-icon\" />\n        ) : (\n          <ChevronDown size={14} className=\"openui-behind-the-scenes__toggle-icon\" />\n        )}\n        {toolsActive ? \"Working...\" : \"Behind the scenes\"}\n      </button>\n      {isExpanded && <div className=\"openui-behind-the-scenes__items\">{children}</div>}\n    </div>\n  );\n};\n","import type { ToolCall } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ChevronDown, SquareCode } from \"lucide-react\";\nimport { useState } from \"react\";\n\nexport interface ToolCallProps {\n  toolCall: ToolCall;\n  isStreaming?: boolean;\n  /** True once tool work is done (e.g. text content has started rendering) */\n  toolsDone?: boolean;\n  isLast?: boolean;\n  className?: string;\n}\n\nexport const ToolCallComponent = ({\n  toolCall,\n  isStreaming,\n  toolsDone,\n  isLast = false,\n  className,\n}: ToolCallProps) => {\n  const isRunning = !!isStreaming && !toolsDone;\n  const actionLabel = isRunning\n    ? `Calling the ${toolCall.function.name} tool`\n    : `Called the ${toolCall.function.name} tool`;\n\n  let parsedArgs: { _request?: unknown; _response?: unknown } | null = null;\n  try {\n    parsedArgs = JSON.parse(toolCall.function.arguments);\n  } catch {\n    // not parseable yet\n  }\n\n  const hasRequest = parsedArgs && parsedArgs._request != null;\n  const hasResponse = parsedArgs && parsedArgs._response != null;\n  const requestStr = hasRequest ? JSON.stringify(parsedArgs!._request, null, 2) : null;\n  const responseStr = hasResponse ? JSON.stringify(parsedArgs!._response, null, 2) : null;\n\n  const plainArgs =\n    !hasRequest && !hasResponse && toolCall.function.arguments\n      ? (() => {\n          try {\n            return JSON.stringify(JSON.parse(toolCall.function.arguments), null, 2);\n          } catch {\n            return toolCall.function.arguments;\n          }\n        })()\n      : null;\n\n  return (\n    <div className={clsx(\"openui-tool-call\", className)}>\n      <div className=\"openui-tool-call__title-row\">\n        <span\n          className={clsx(\"openui-tool-call__icon-wrapper\", {\n            \"openui-tool-call__icon--blinking\": isRunning && isLast,\n          })}\n        >\n          <SquareCode size={14} className=\"openui-tool-call__icon\" />\n        </span>\n        <span\n          className={clsx(\"openui-tool-call__name\", {\n            \"openui-tool-call__name--shimmer\": isRunning && isLast,\n          })}\n        >\n          {actionLabel}\n        </span>\n      </div>\n      <div\n        className={clsx(\"openui-tool-call__connector\", {\n          \"openui-tool-call__connector--last\": isLast,\n        })}\n      >\n        <div className=\"openui-tool-call__args-block\">\n          {requestStr && (\n            <ToolCodeBlock\n              type=\"request\"\n              code={requestStr}\n              isRunning={isRunning && !hasResponse}\n              toolName={toolCall.function.name}\n            />\n          )}\n          {responseStr && (\n            <ToolCodeBlock\n              type=\"response\"\n              code={responseStr}\n              isRunning={isRunning && isLast}\n              toolName={toolCall.function.name}\n            />\n          )}\n          {plainArgs && (\n            <ToolCodeBlock\n              type=\"request\"\n              code={plainArgs}\n              isRunning={isRunning}\n              toolName={toolCall.function.name}\n            />\n          )}\n        </div>\n      </div>\n    </div>\n  );\n};\n\n// ── Expandable code block (request / response) ──\n\ninterface ToolCodeBlockProps {\n  type: \"request\" | \"response\";\n  code: string;\n  isRunning?: boolean;\n  toolName: string;\n}\n\nconst ToolCodeBlock = ({ type, code, isRunning = false, toolName }: ToolCodeBlockProps) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  const label = type === \"request\" ? \"Tool Request\" : \"Tool Response\";\n  const runningLabel =\n    type === \"request\"\n      ? `Sending request to ${toolName}...`\n      : `Awaiting response from ${toolName}...`;\n\n  return (\n    <div className=\"openui-tool-code-block\">\n      <button\n        className=\"openui-tool-code-block__header\"\n        onClick={() => setIsExpanded((v) => !v)}\n        type=\"button\"\n      >\n        <span\n          className={clsx(\"openui-tool-code-block__label\", {\n            \"openui-tool-code-block__label--loading\": isRunning,\n          })}\n        >\n          {isRunning ? runningLabel : label}\n        </span>\n        <ChevronDown\n          size={14}\n          className={clsx(\"openui-tool-code-block__chevron\", {\n            \"openui-tool-code-block__chevron--expanded\": isExpanded,\n          })}\n        />\n      </button>\n      {isExpanded && (\n        <div className=\"openui-tool-code-block__content\">\n          <pre className=\"openui-tool-code-block__code\">{code}</pre>\n        </div>\n      )}\n    </div>\n  );\n};\n","import type { ToolMessage } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { AlertCircle, CheckCircle2, ChevronDown } from \"lucide-react\";\nimport { useState } from \"react\";\n\nexport interface ToolResultProps {\n  message: ToolMessage;\n  /** The name of the tool that was called (resolved from the parent assistant message's toolCalls) */\n  toolName?: string;\n  className?: string;\n}\n\nexport const ToolResult = ({ message, toolName, className }: ToolResultProps) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const hasError = !!message.error;\n\n  return (\n    <div\n      className={clsx(\"openui-tool-result\", className, {\n        \"openui-tool-result--error\": hasError,\n      })}\n    >\n      <button\n        className=\"openui-tool-result__header\"\n        onClick={() => setIsExpanded(!isExpanded)}\n        type=\"button\"\n      >\n        <div className=\"openui-tool-result__header-left\">\n          {hasError ? (\n            <AlertCircle size={14} className=\"openui-tool-result__icon--error\" />\n          ) : (\n            <CheckCircle2 size={14} className=\"openui-tool-result__icon--success\" />\n          )}\n          <span className=\"openui-tool-result__label\">\n            {toolName ? `${toolName} result` : \"Tool result\"}\n          </span>\n        </div>\n        <ChevronDown\n          size={14}\n          className={clsx(\"openui-tool-result__chevron\", {\n            \"openui-tool-result__chevron--expanded\": isExpanded,\n          })}\n        />\n      </button>\n      {isExpanded && (\n        <div className=\"openui-tool-result__content\">\n          {hasError && <div className=\"openui-tool-result__error\">{message.error}</div>}\n          <pre className=\"openui-tool-result__output\">{message.content}</pre>\n        </div>\n      )}\n    </div>\n  );\n};\n","import { useState } from \"react\";\n\nexport const useComposerState = () => {\n  const [textContent, setTextContent] = useState(\"\");\n  return { textContent, setTextContent };\n};\n","import { useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ArrowUp, Square } from \"lucide-react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { useComposerState } from \"../../../hooks/useComposerState\";\nimport { IconButton } from \"../../IconButton\";\n\nexport interface ComposerProps {\n  className?: string;\n  placeholder?: string;\n}\n\nexport const Composer = ({ className, placeholder = \"Type your message...\" }: ComposerProps) => {\n  const { textContent, setTextContent } = useComposerState();\n  const processMessage = useThread((s) => s.processMessage);\n  const cancelMessage = useThread((s) => s.cancelMessage);\n  const isRunning = useThread((s) => s.isRunning);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n  const inputRef = useRef<HTMLTextAreaElement>(null);\n\n  const handleSubmit = () => {\n    if (!textContent.trim() || isRunning || isLoadingMessages) {\n      return;\n    }\n\n    processMessage({\n      role: \"user\",\n      content: textContent,\n    });\n\n    setTextContent(\"\");\n  };\n\n  useLayoutEffect(() => {\n    const input = inputRef.current;\n    if (!input) return;\n\n    // Reset to 0 (not \"auto\") so scrollHeight reflects content, not container\n    input.style.height = \"0px\";\n    input.style.height = `${Math.max(input.scrollHeight, 24)}px`;\n  }, [textContent]);\n\n  return (\n    <div\n      className={clsx(\"openui-copilot-shell-thread-composer\", className)}\n      data-drafting={textContent.length > 0 || undefined}\n      onClick={(e) => {\n        if (!(e.target as HTMLElement).closest(\"button, a, [role='button']\")) {\n          inputRef.current?.focus();\n        }\n      }}\n    >\n      <div className=\"openui-copilot-shell-thread-composer__input-wrapper\">\n        <textarea\n          ref={inputRef}\n          value={textContent}\n          onChange={(e) => setTextContent(e.target.value)}\n          className=\"openui-copilot-shell-thread-composer__input\"\n          placeholder={placeholder}\n          rows={1}\n          onKeyDown={(e) => {\n            if (e.key === \"Enter\" && !e.shiftKey) {\n              e.preventDefault();\n              handleSubmit();\n            }\n          }}\n        />\n        <div className=\"openui-copilot-shell-thread-composer__action-bar\">\n          <IconButton\n            onClick={isRunning ? cancelMessage : handleSubmit}\n            icon={isRunning ? <Square size=\"1em\" fill=\"currentColor\" /> : <ArrowUp size=\"1em\" />}\n            size=\"extra-small\"\n            variant=\"primary\"\n            aria-label={isRunning ? \"Cancel message\" : \"Send message\"}\n            className=\"openui-copilot-shell-thread-composer__submit-button\"\n          />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Composer;\n","import type { AssistantMessage, Message, ToolMessage } from \"@openuidev/react-headless\";\nimport { MessageProvider, useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport React, { memo, useRef } from \"react\";\nimport { ScrollVariant, useScrollToBottom } from \"../../hooks/useScrollToBottom\";\nimport { ArtifactOverlay } from \"../_shared/artifact\";\nimport { useShellStore } from \"../_shared/store\";\nimport type { AssistantMessageComponent, UserMessageComponent } from \"../_shared/types\";\nimport { MarkDownRenderer } from \"../MarkDownRenderer\";\nimport { MessageLoading as MessageLoadingComponent } from \"../MessageLoading\";\nimport { ToolCallComponent } from \"../ToolCall\";\nimport { ToolResult } from \"../ToolResult\";\n\nexport const ThreadContainer = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  return (\n    <div\n      className={clsx(\"openui-copilot-shell-thread-container\", className)}\n      style={{\n        visibility: isLoadingMessages ? \"hidden\" : undefined,\n      }}\n    >\n      {children}\n      <ArtifactOverlay />\n    </div>\n  );\n};\n\nexport const ScrollArea = ({\n  children,\n  className,\n  scrollVariant = \"user-message-anchor\",\n  userMessageSelector = \".openui-copilot-shell-thread-message-user\",\n}: {\n  children?: React.ReactNode;\n  className?: string;\n  /**\n   * Scroll to bottom once the last message is added\n   */\n  scrollVariant?: ScrollVariant;\n  /**\n   * Selector for the user message\n   */\n  userMessageSelector?: string;\n}) => {\n  const ref = useRef<HTMLDivElement>(null);\n\n  const messages = useThread((s) => s.messages);\n  const isRunning = useThread((s) => s.isRunning);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  useScrollToBottom({\n    ref,\n    lastMessage: messages[messages.length - 1] || { id: \"\" },\n    scrollVariant,\n    userMessageSelector,\n    isRunning,\n    isLoadingMessages,\n  });\n\n  return (\n    <div className=\"openui-copilot-shell-thread-scroll-container\">\n      <div\n        ref={ref}\n        className={clsx(\n          \"openui-copilot-shell-thread-scroll-area\",\n          {\n            \"openui-copilot-shell-thread-scroll-area--user-message-anchor\":\n              scrollVariant === \"user-message-anchor\",\n          },\n          className,\n        )}\n      >\n        {children}\n      </div>\n    </div>\n  );\n};\n\nexport const AssistantMessageContainer = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  const { logoUrl, showAssistantLogo } = useShellStore((store) => ({\n    logoUrl: store.logoUrl,\n    showAssistantLogo: store.showAssistantLogo,\n  }));\n\n  return (\n    <div className={clsx(\"openui-copilot-shell-thread-message-assistant\", className)}>\n      {showAssistantLogo && (\n        <img\n          src={logoUrl}\n          alt=\"Assistant\"\n          className=\"openui-copilot-shell-thread-message-assistant__logo\"\n        />\n      )}\n      <div className=\"openui-copilot-shell-thread-message-assistant__content\">{children}</div>\n    </div>\n  );\n};\n\nexport const UserMessageContainer = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  return (\n    <div className={clsx(\"openui-copilot-shell-thread-message-user\", className)}>\n      <div className=\"openui-copilot-shell-thread-message-user__content\">{children}</div>\n    </div>\n  );\n};\n\nconst AssistantMessageContent = ({\n  message,\n  allMessages,\n}: {\n  message: AssistantMessage;\n  allMessages: Message[];\n}) => {\n  const getToolName = (toolCallId: string) => {\n    const toolCall = message.toolCalls?.find((tc) => tc.id === toolCallId);\n    return toolCall?.function.name;\n  };\n\n  const toolMessages: ToolMessage[] = [];\n  const msgIndex = allMessages.findIndex((m) => m.id === message.id);\n  if (msgIndex !== -1) {\n    for (let i = msgIndex + 1; i < allMessages.length; i++) {\n      const m = allMessages[i];\n      if (m && m.role === \"tool\") {\n        toolMessages.push(m as ToolMessage);\n      } else {\n        break;\n      }\n    }\n  }\n\n  return (\n    <>\n      {message.content && (\n        <MarkDownRenderer\n          textMarkdown={message.content}\n          className=\"openui-copilot-shell-thread-message-assistant__text\"\n        />\n      )}\n      {message.toolCalls?.map((toolCall) => (\n        <ToolCallComponent key={toolCall.id} toolCall={toolCall} />\n      ))}\n      {toolMessages.map((tm) => (\n        <ToolResult key={tm.id} message={tm} toolName={getToolName(tm.toolCallId)} />\n      ))}\n    </>\n  );\n};\n\nconst UserMessageContent = ({ message }: { message: Message }) => {\n  if (message.role !== \"user\") return null;\n  const content = message.content;\n  if (typeof content === \"string\") {\n    return <>{content}</>;\n  }\n  return (\n    <>\n      {content?.map((part, i) => {\n        if (part.type === \"text\") {\n          return <span key={i}>{part.text}</span>;\n        }\n        if (part.type === \"binary\" && part.url) {\n          return (\n            <img\n              key={i}\n              src={part.url}\n              alt=\"\"\n              className=\"openui-copilot-shell-thread-message-user__image\"\n            />\n          );\n        }\n        return null;\n      })}\n    </>\n  );\n};\n\nexport const RenderMessage = memo(\n  ({\n    message,\n    className,\n    allMessages,\n    assistantMessage: CustomAssistantMessage,\n    userMessage: CustomUserMessage,\n    isStreaming,\n  }: {\n    message: Message;\n    className?: string;\n    allMessages: Message[];\n    assistantMessage?: AssistantMessageComponent;\n    userMessage?: UserMessageComponent;\n    isStreaming: boolean;\n  }) => {\n    if (message.role === \"tool\") {\n      return null;\n    }\n\n    if (message.role === \"assistant\") {\n      if (CustomAssistantMessage) {\n        return <CustomAssistantMessage message={message} isStreaming={isStreaming} />;\n      }\n      return (\n        <AssistantMessageContainer className={className}>\n          <AssistantMessageContent message={message} allMessages={allMessages} />\n        </AssistantMessageContainer>\n      );\n    }\n\n    if (message.role === \"user\") {\n      if (CustomUserMessage) {\n        return <CustomUserMessage message={message} />;\n      }\n      return (\n        <UserMessageContainer className={className}>\n          <UserMessageContent message={message} />\n        </UserMessageContainer>\n      );\n    }\n\n    return null;\n  },\n);\n\nexport const MessageLoading = () => {\n  return (\n    <div className=\"openui-copilot-shell-thread-message-loading\">\n      <MessageLoadingComponent />\n    </div>\n  );\n};\n\nexport const Messages = ({\n  className,\n  loader,\n  assistantMessage,\n  userMessage,\n}: {\n  className?: string;\n  loader?: React.ReactNode;\n  assistantMessage?: AssistantMessageComponent;\n  userMessage?: UserMessageComponent;\n}) => {\n  const messages = useThread((s) => s.messages);\n  const isRunning = useThread((s) => s.isRunning);\n\n  return (\n    <div className={clsx(\"openui-copilot-shell-thread-messages\", className)}>\n      {messages.map((message, i) => {\n        return (\n          <MessageProvider key={message.id} message={message}>\n            <RenderMessage\n              message={message}\n              allMessages={messages}\n              assistantMessage={assistantMessage}\n              userMessage={userMessage}\n              isStreaming={isRunning && i === messages.length - 1}\n            />\n          </MessageProvider>\n        );\n      })}\n      {isRunning && <div>{loader}</div>}\n    </div>\n  );\n};\n\n// Re-export Composer from components\nexport { Composer } from \"./components\";\n","import { useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ReactNode } from \"react\";\nimport { isChatEmpty } from \"../_shared/utils\";\n\ninterface WelcomeScreenBaseProps {\n  /**\n   * Additional CSS class name\n   */\n  className?: string;\n}\n\ninterface WelcomeScreenWithContentProps extends WelcomeScreenBaseProps {\n  /**\n   * The greeting/title text to display\n   */\n  title?: string;\n  /**\n   * Optional description text to add more context\n   */\n  description?: string;\n  /**\n   * Image to display - can be a URL object or a ReactNode\n   * - { url: string }: Renders an <img> tag with default styling (64x64, object-fit: cover, rounded)\n   * - ReactNode: Renders the provided element directly (for custom icons, styled images, etc.)\n   */\n  image?: { url: string } | ReactNode;\n  /**\n   * Children are not allowed when using props-based content\n   */\n  children?: never;\n}\n\ninterface WelcomeScreenWithChildrenProps extends WelcomeScreenBaseProps {\n  /**\n   * Custom content to render inside the welcome screen\n   * When children are provided, title, description, and image are ignored\n   */\n  children: ReactNode;\n  title?: never;\n  description?: never;\n  image?: never;\n}\n\nexport type WelcomeScreenProps = WelcomeScreenWithContentProps | WelcomeScreenWithChildrenProps;\n\n/**\n * Type guard to check if image is a URL object\n */\nconst isImageUrl = (image: { url: string } | ReactNode): image is { url: string } => {\n  return typeof image === \"object\" && image !== null && \"url\" in image;\n};\n\nexport const WelcomeScreen = (props: WelcomeScreenProps) => {\n  const { className } = props;\n\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  // Only show when there are no messages\n  if (!isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  // Check if children are provided\n  if (\"children\" in props && props.children) {\n    return (\n      <div className={clsx(\"openui-copilot-shell-welcome-screen\", className)}>{props.children}</div>\n    );\n  }\n\n  // Props-based content\n  const { title, description, image } = props as WelcomeScreenWithContentProps;\n\n  const renderImage = () => {\n    if (!image) return null;\n\n    if (isImageUrl(image)) {\n      return (\n        <img\n          src={image.url}\n          alt={title || \"\"}\n          className=\"openui-copilot-shell-welcome-screen__image\"\n        />\n      );\n    }\n\n    return image;\n  };\n\n  return (\n    <div className={clsx(\"openui-copilot-shell-welcome-screen\", className)}>\n      {image && (\n        <div className=\"openui-copilot-shell-welcome-screen__image-container\">{renderImage()}</div>\n      )}\n      {(title || description) && (\n        <div className=\"openui-copilot-shell-welcome-screen__content\">\n          {title && <h2 className=\"openui-copilot-shell-welcome-screen__title\">{title}</h2>}\n          {description && (\n            <p className=\"openui-copilot-shell-welcome-screen__description\">{description}</p>\n          )}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default WelcomeScreen;\n","export * from \"./Container\";\nexport * from \"./ConversationStarter\";\nexport * from \"./Header\";\nexport * from \"./Thread\";\nexport * from \"./WelcomeScreen\";\n","import React, { createContext, useContext } from \"react\";\nimport { DateRange } from \"react-day-picker\";\n\ninterface DatePickerContextType {\n  selectedDate: Date | undefined;\n  selectedRange: DateRange | undefined;\n  isOpen: boolean;\n  mode: \"single\" | \"range\";\n  botType: \"mobile\" | \"fullscreen\" | \"tray\" | \"copilot\";\n\n  setSelectedDate: (date: Date | undefined) => void;\n  setSelectedRange: (range: DateRange | undefined) => void;\n  setIsOpen: (isOpen: boolean) => void;\n}\n\nconst defaultContext: DatePickerContextType = {\n  selectedDate: undefined,\n  selectedRange: { from: undefined, to: undefined },\n  isOpen: false,\n  mode: \"single\",\n  botType: \"fullscreen\",\n\n  setSelectedDate: (_date: Date | undefined) => {},\n  setSelectedRange: (_range: DateRange | undefined) => {},\n  setIsOpen: (_isOpen: boolean) => {},\n};\n\nconst DatePickerContext = createContext<DatePickerContextType>(defaultContext);\n\nexport const useDatePicker = () => {\n  const context = useContext(DatePickerContext);\n  if (!context) {\n    throw new Error(\"useDatePicker must be used within a DatePickerProvider\");\n  }\n  return context;\n};\n\ninterface DatePickerProviderProps {\n  children: React.ReactNode;\n  // DatePicker State needed from parent\n  selectedDateFromParent: Date | undefined;\n  selectedRangeFromParent: DateRange | undefined;\n  mode: \"single\" | \"range\";\n  botType: \"mobile\" | \"fullscreen\" | \"tray\" | \"copilot\";\n\n  setSelectedDateFromParent: (date: Date | undefined) => void;\n  setSelectedRangeFromParent: (range: DateRange | undefined) => void;\n  isOpenFromParent: boolean;\n  setIsOpenFromParent: (isOpen: boolean) => void;\n}\n\nexport const DatePickerProvider: React.FC<DatePickerProviderProps> = ({\n  children,\n\n  selectedDateFromParent,\n  selectedRangeFromParent,\n  setSelectedDateFromParent,\n  setSelectedRangeFromParent,\n  isOpenFromParent,\n  setIsOpenFromParent,\n\n  mode,\n  botType,\n}) => {\n  return (\n    <DatePickerContext.Provider\n      value={{\n        // DatePicker State needed from parent\n        selectedDate: selectedDateFromParent,\n        selectedRange: selectedRangeFromParent,\n        setSelectedDate: setSelectedDateFromParent,\n        setSelectedRange: setSelectedRangeFromParent,\n\n        mode,\n\n        isOpen: isOpenFromParent,\n        setIsOpen: setIsOpenFromParent,\n\n        botType,\n      }}\n    >\n      {children}\n    </DatePickerContext.Provider>\n  );\n};\n\nexport default DatePickerContext;\n","import { format } from \"date-fns\";\nimport { DateRange } from \"react-day-picker\";\n\nexport const getMonthName = (monthNumber: number): string => {\n  switch (monthNumber) {\n    case 0:\n      return \"January\";\n    case 1:\n      return \"February\";\n    case 2:\n      return \"March\";\n    case 3:\n      return \"April\";\n    case 4:\n      return \"May\";\n    case 5:\n      return \"June\";\n    case 6:\n      return \"July\";\n    case 7:\n      return \"August\";\n    case 8:\n      return \"September\";\n    case 9:\n      return \"October\";\n    case 10:\n      return \"November\";\n    case 11:\n      return \"December\";\n    default:\n      return \"Invalid Month\";\n  }\n};\n\nexport const getMonthNumber = (monthName: string): number => {\n  switch (monthName) {\n    case \"January\":\n      return 0;\n    case \"February\":\n      return 1;\n    case \"March\":\n      return 2;\n    case \"April\":\n      return 3;\n    case \"May\":\n      return 4;\n    case \"June\":\n      return 5;\n    case \"July\":\n      return 6;\n    case \"August\":\n      return 7;\n    case \"September\":\n      return 8;\n    case \"October\":\n      return 9;\n    case \"November\":\n      return 10;\n    case \"December\":\n      return 11;\n    default:\n      return -1;\n  }\n};\n\nexport const formatDateRange = (range: DateRange | undefined): string => {\n  if (!range) return \"Select a range\";\n\n  const { from, to } = range;\n\n  if (!from) return \"Select a range\";\n\n  if (!to) {\n    return format(from, \"MMM d, yyyy\");\n  }\n\n  if (from.toDateString() === to.toDateString()) {\n    return format(from, \"MMM d, yyyy\");\n  }\n\n  return `${format(from, \"MMM d, yyyy\")} - ${format(to, \"MMM d, yyyy\")}`;\n};\n\nexport const formatSingleDate = (date: Date | undefined): string => {\n  if (!date) return \"Select a date\";\n  return format(date, \"MMM d, yyyy\");\n};\n","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { Calendar } from \"../../../Calendar\";\nimport { useDatePicker } from \"../context/DatePickerContext\";\n\nconst DatepickerRenderer = forwardRef<\n  HTMLDivElement,\n  { className?: string; style?: React.CSSProperties }\n>(({ className, style }, ref) => {\n  const { selectedDate, selectedRange, mode, setSelectedDate, setSelectedRange } = useDatePicker();\n\n  if (mode === \"single\") {\n    return (\n      <div\n        ref={ref}\n        className={clsx(\"openui-date-picker-renderer-single-mode\", className)}\n        style={style}\n      >\n        <Calendar\n          mode=\"single\"\n          selected={selectedDate}\n          onSelect={setSelectedDate}\n          startMonth={new Date(1900, 0)}\n          endMonth={new Date(2100, 11)}\n        />\n      </div>\n    );\n  }\n\n  return (\n    <div\n      ref={ref}\n      className={clsx(\"openui-date-picker-renderer-range-mode\", className)}\n      style={style}\n    >\n      <Calendar\n        mode=\"range\"\n        selected={selectedRange}\n        onSelect={setSelectedRange}\n        startMonth={new Date(1900, 0)}\n        endMonth={new Date(2100, 11)}\n      />\n    </div>\n  );\n});\n\nexport { DatepickerRenderer };\n","import { autoUpdate, flip, offset, useFloating } from \"@floating-ui/react-dom\";\nimport clsx from \"clsx\";\nimport { ChevronDown } from \"lucide-react\";\nimport { forwardRef, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useMultipleRefs } from \"../../../../hooks/useMultipleRefs\";\nimport { useTheme } from \"../../../ThemeProvider\";\nimport { useDatePicker } from \"../context/DatePickerContext\";\nimport { formatDateRange, formatSingleDate } from \"../utils/helperFn\";\nimport { DatepickerRenderer } from \"./DatePickerRenderer\";\n\nconst FloatingDateInput = () => {\n  const { mode, selectedDate, selectedRange, isOpen, setIsOpen } = useDatePicker();\n  const hasSelectedDate =\n    mode === \"single\"\n      ? !!selectedDate\n      : !!(selectedRange && selectedRange.from && selectedRange.to);\n\n  return (\n    <div\n      className={clsx(\"openui-date-picker-renderer-floating-input-container\", {\n        \"openui-date-picker-renderer-floating-input-container-open\": isOpen,\n        \"openui-date-picker-renderer-floating-input-container-not-open\": !isOpen,\n        \"openui-date-picker-renderer-floating-input-container-has-no-selected-date\":\n          !hasSelectedDate,\n      })}\n      onClick={(e) => {\n        e.stopPropagation();\n        setIsOpen(!isOpen);\n      }}\n    >\n      <span className=\"openui-date-picker-renderer-floating-input-container-text\">\n        {mode === \"single\" ? formatSingleDate(selectedDate) : formatDateRange(selectedRange)}\n      </span>\n      <ChevronDown\n        size={16}\n        className={clsx({ \"openui-date-picker-renderer-floating-input-container-icon\": isOpen })}\n      />\n    </div>\n  );\n};\n\nconst FloatingDatePicker = forwardRef<HTMLDivElement>((_, ref) => {\n  const { isOpen } = useDatePicker();\n  const menuPositionDivRef = useRef<HTMLDivElement>(null);\n  const { portalThemeClassName } = useTheme();\n\n  const {\n    refs: { setFloating, setReference },\n    floatingStyles,\n  } = useFloating({\n    strategy: \"absolute\",\n    placement: \"bottom-start\",\n    whileElementsMounted: autoUpdate,\n    middleware: [offset(5), flip()],\n  });\n\n  const menuPositionDivRefs = useMultipleRefs(setReference, menuPositionDivRef);\n  const floatingRef = useMultipleRefs(setFloating, ref);\n\n  if (!isOpen) {\n    return null;\n  }\n\n  return (\n    <>\n      <div\n        ref={menuPositionDivRefs}\n        className={clsx(\"openui-date-picker-renderer-floating-reference\")}\n      />\n      {createPortal(\n        <div\n          ref={floatingRef}\n          style={{ ...floatingStyles, width: \"fit-content\" }}\n          className={clsx(\"openui-date-picker-renderer-floating-content\", portalThemeClassName)}\n        >\n          <div className=\"openui-date-picker-renderer-floating-menu\">\n            <DatepickerRenderer />\n          </div>\n        </div>,\n        document.body,\n      )}\n    </>\n  );\n});\n\nexport const FloatingDatePickerRenderer = ({\n  className,\n  style,\n}: {\n  className?: string;\n  style?: React.CSSProperties;\n}) => {\n  const { isOpen, setIsOpen } = useDatePicker();\n  const menuRef = useRef<HTMLDivElement>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (!isOpen) return;\n\n    const handleInteraction = (e: MouseEvent | TouchEvent) => {\n      const targetNode = e.target as Node;\n      if (menuRef.current?.contains(targetNode) || containerRef.current?.contains(targetNode)) {\n        return;\n      }\n      setIsOpen(false);\n    };\n\n    document.body.addEventListener(\"mousedown\", handleInteraction);\n    document.body.addEventListener(\"touchstart\", handleInteraction);\n\n    return () => {\n      document.body.removeEventListener(\"mousedown\", handleInteraction);\n      document.body.removeEventListener(\"touchstart\", handleInteraction);\n    };\n  }, [isOpen, setIsOpen]);\n\n  return (\n    <div\n      ref={containerRef}\n      className={clsx(\"openui-date-picker-renderer-floating-container\", className)}\n      style={style}\n    >\n      <FloatingDateInput />\n      <FloatingDatePicker ref={menuRef} />\n    </div>\n  );\n};\n","import { useState } from \"react\";\nimport { DateRange } from \"react-day-picker\";\nimport { useLayoutContext } from \"../../context/LayoutContext\";\nimport { FloatingDatePickerRenderer } from \"./helpers/components/FloatingDatePickerRenderer\";\nimport { DatePickerProvider } from \"./helpers/context/DatePickerContext\";\n\nexport interface DatePickerProps {\n  mode?: \"single\" | \"range\";\n  selectedSingleDate?: Date;\n  selectedRangeDates?: DateRange;\n  setSelectedSingleDate?: (date?: Date) => void;\n  setSelectedRangeDates?: (range?: DateRange) => void;\n  isOpen?: boolean;\n  setIsOpen?: (isOpen: boolean) => void;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nconst DatePicker = (props: DatePickerProps) => {\n  const { layout } = useLayoutContext();\n\n  const {\n    mode = \"single\",\n    selectedSingleDate,\n    selectedRangeDates,\n    setSelectedSingleDate,\n    setSelectedRangeDates,\n    isOpen,\n    setIsOpen,\n    className,\n    style,\n  } = props;\n\n  const [internalSelectedDate, setInternalSelectedDate] = useState<Date | undefined>(\n    selectedSingleDate,\n  );\n  const [internalSelectedRange, setInternalSelectedRange] = useState<DateRange | undefined>(\n    selectedRangeDates,\n  );\n  const [internalIsOpen, setInternalIsOpen] = useState(isOpen ?? false);\n\n  // this derived setter state is used to make this component more flexible\n  // it allows the user to pass in a setter function from the parent component\n  // if the parent component does not pass in a setter function, the internal setter state is used\n  // this allows the user to pass in a setter function from the parent component, but still have the internal state be set\n\n  // this design decision closely follow\n\n  const selectedDateHandler = (selectedDate?: Date) => {\n    if (selectedSingleDate) {\n      setSelectedSingleDate?.(selectedDate);\n      return;\n    }\n\n    setSelectedSingleDate?.(selectedDate);\n    setInternalSelectedDate(selectedDate);\n  };\n\n  const selectedRangeHandler = (selectedRange?: DateRange) => {\n    if (selectedRangeDates) {\n      setSelectedRangeDates?.(selectedRange);\n      return;\n    }\n\n    setSelectedRangeDates?.(selectedRange);\n    setInternalSelectedRange(selectedRange);\n  };\n\n  return (\n    <DatePickerProvider\n      mode={mode}\n      botType={layout}\n      selectedDateFromParent={selectedSingleDate ?? internalSelectedDate}\n      selectedRangeFromParent={selectedRangeDates ?? internalSelectedRange}\n      setSelectedDateFromParent={selectedDateHandler}\n      setSelectedRangeFromParent={selectedRangeHandler}\n      isOpenFromParent={isOpen ?? internalIsOpen}\n      setIsOpenFromParent={setIsOpen ?? setInternalIsOpen}\n    >\n      <FloatingDatePickerRenderer className={className} style={style} />\n    </DatePickerProvider>\n  );\n};\n\nexport { DatePicker };\n","import clsx from \"clsx\";\nimport { CSSProperties, forwardRef, ReactElement } from \"react\";\nimport { FollowUpItemProps } from \"../FollowUpItem\";\n\nexport interface FollowUpBlockProps extends React.HTMLAttributes<HTMLDivElement> {\n  children: ReactElement<FollowUpItemProps> | ReactElement<FollowUpItemProps>[];\n  className?: string;\n  style?: CSSProperties;\n}\n\nconst FollowUpBlock = forwardRef<HTMLDivElement, FollowUpBlockProps>((props, ref) => {\n  const { children, className, style, ...rest } = props;\n  return (\n    <div ref={ref} className={clsx(\"openui-follow-up-block\", className)} style={style} {...rest}>\n      <div className=\"openui-follow-up-block__header\">Related Queries</div>\n      {children}\n    </div>\n  );\n});\n\nFollowUpBlock.displayName = \"FollowUpBlock\";\n\nexport { FollowUpBlock };\n","import clsx from \"clsx\";\nimport { ButtonHTMLAttributes, forwardRef, ReactNode } from \"react\";\n\nexport interface FollowUpItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n  text: ReactNode;\n  icon?: ReactNode;\n  className?: string;\n}\n\nconst FollowUpItem = forwardRef<HTMLButtonElement, FollowUpItemProps>((props, ref) => {\n  const { className, text, icon, ...rest } = props;\n  return (\n    <button ref={ref} className={clsx(\"openui-follow-up-item\", className)} {...rest}>\n      {text && <span className=\"openui-follow-up-item-text\">{text}</span>}\n      {icon && <span className=\"openui-follow-up-item-icon\">{icon}</span>}\n    </button>\n  );\n});\n\nFollowUpItem.displayName = \"FollowUpItem\";\n\nexport { FollowUpItem };\n","import React, { createContext, useContext } from \"react\";\n\nexport interface FormControlContextValue {\n  hasError: boolean;\n}\n\nconst FormControlContext = createContext<FormControlContextValue | null>(null);\n\nexport function useFormControlContext(): FormControlContextValue | null {\n  return useContext(FormControlContext);\n}\n\nexport function FormControlProvider(\n  props: React.PropsWithChildren<{ value: FormControlContextValue }>,\n) {\n  const { value, children } = props;\n  return <FormControlContext.Provider value={value}>{children}</FormControlContext.Provider>;\n}\n","import clsx from \"clsx\";\nimport React, { forwardRef, useMemo } from \"react\";\nimport { FormControlProvider } from \"./context\";\nexport interface FormControlProps {\n  children: React.ReactNode;\n  className?: string;\n  style?: React.CSSProperties;\n  hasError?: boolean;\n}\n\nconst FormControl = forwardRef<HTMLDivElement, FormControlProps>((props, ref) => {\n  const { children, className, style, hasError = false } = props;\n  const formControlContextValue = useMemo(() => ({ hasError }), [hasError]);\n  return (\n    <div ref={ref} className={clsx(\"openui-form-control\", className)} style={style}>\n      <FormControlProvider value={formControlContextValue}>{children}</FormControlProvider>\n    </div>\n  );\n});\n\nFormControl.displayName = \"FormControl\";\n\nexport { FormControl };\n","import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { useFormControlContext } from \"../context\";\n\nexport interface HintProps extends React.ComponentPropsWithoutRef<\"div\"> {\n  children: React.ReactNode;\n  className?: string;\n  style?: React.CSSProperties;\n  hasError?: boolean;\n}\n\nconst Hint = forwardRef<HTMLDivElement, HintProps>(\n  ({ children, className, style, hasError, ...props }, ref) => {\n    const ctx = useFormControlContext();\n    const resolvedHasError = hasError ?? ctx?.hasError ?? false;\n    return (\n      <div\n        ref={ref}\n        className={clsx(\"openui-hint\", className, {\n          \"openui-hint-error\": resolvedHasError,\n        })}\n        style={style}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  },\n);\n\nHint.displayName = \"Hint\";\n\nexport { Hint };\n","import * as AspectRatio from \"@radix-ui/react-aspect-ratio\";\nimport clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\n\ntype AspectRatioType = \"1:1\" | \"3:2\" | \"3:4\" | \"4:3\" | \"16:9\";\ntype ScaleType = \"fit\" | \"fill\";\n\nexport interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n  src: string;\n  alt?: string;\n  styles?: React.CSSProperties;\n  className?: string;\n  aspectRatio?: AspectRatioType;\n  scale?: ScaleType;\n}\n\nconst aspectRatioMap: Record<AspectRatioType, number> = {\n  \"1:1\": 1,\n  \"3:2\": 3 / 2,\n  \"3:4\": 3 / 4,\n  \"4:3\": 4 / 3,\n  \"16:9\": 16 / 9,\n};\n\nconst scaleMap: Record<ScaleType, string> = {\n  fit: \"openui-image-fit\",\n  fill: \"openui-image-fill\",\n};\n\nexport const Image = forwardRef<HTMLImageElement, ImageProps>((props, ref) => {\n  const { src, alt, styles, className, aspectRatio = \"3:2\", scale = \"fill\", ...rest } = props;\n\n  const imageClasses = clsx(\n    \"openui-image\",\n    {\n      [`${scaleMap[scale]}`]: scale,\n    },\n    className,\n  );\n\n  const image = (\n    <img\n      ref={ref}\n      src={src}\n      alt={alt}\n      className={imageClasses}\n      style={styles}\n      onError={(e) => {\n        e.currentTarget.style.display = \"none\";\n        console.error(`Failed to load image: ${src}`);\n      }}\n      {...rest}\n    />\n  );\n\n  return <AspectRatio.Root ratio={aspectRatioMap[aspectRatio]}>{image}</AspectRatio.Root>;\n});\n\nImage.displayName = \"Image\";\n","import { RefObject, useLayoutEffect, useState } from \"react\";\n\nexport type Breakpoint = \"mobile\" | \"tablet\" | \"desktop\";\n\nexport function getBreakpoint(width: number): Breakpoint {\n  if (width < 480) return \"mobile\";\n  if (width < 800) return \"tablet\";\n  return \"desktop\";\n}\n\nexport interface ContainerSize {\n  width: number;\n  height: number;\n  breakpoint: Breakpoint;\n}\n\n/**\n * Continuously tracks a container's size via ResizeObserver and returns\n * width, height, and a breakpoint derived from the container width.\n *\n * Breakpoints: mobile (<480px) | tablet (480–800px) | desktop (>800px)\n */\nexport function useResponsiveContainer(containerRef: RefObject<HTMLElement | null>): ContainerSize {\n  const [size, setSize] = useState<ContainerSize>({\n    width: 0,\n    height: 0,\n    breakpoint: \"mobile\",\n  });\n\n  const [element, setElement] = useState<HTMLElement | null>(null);\n\n  // Sync ref.current → state on every render so we pick up refs\n  // populated after initial mount (portals, conditional renders, etc.)\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  useLayoutEffect(() => {\n    const current = containerRef.current;\n    if (current !== element) {\n      setElement(current);\n    }\n  });\n\n  useLayoutEffect(() => {\n    if (!element) return;\n\n    const updateSize = () => {\n      const width = element.clientWidth;\n      const height = element.clientHeight;\n      setSize((prev) => {\n        if (prev.width === width && prev.height === height) return prev;\n        return { width, height, breakpoint: getBreakpoint(width) };\n      });\n    };\n\n    const rafUpdateSize = () => requestAnimationFrame(updateSize);\n\n    const resizeObserver = new ResizeObserver(rafUpdateSize);\n    resizeObserver.observe(element);\n    updateSize();\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [element]);\n\n  return size;\n}\n","import clsx from \"clsx\";\nimport React, { forwardRef, useRef, useState } from \"react\";\nimport { useResponsiveContainer } from \"../../hooks/useResponsiveContainer\";\n\nexport interface ImageBlockProps extends React.HTMLAttributes<HTMLDivElement> {\n  src: string;\n  alt?: string;\n  imageLoading?: boolean;\n}\n\nexport const ImageBlock = forwardRef<HTMLDivElement, ImageBlockProps>(\n  ({ src, alt, className, imageLoading, ...rest }, ref) => {\n    const [isImageLoading, setIsImageLoading] = useState<boolean>(imageLoading ?? true);\n    const [hasError, setHasError] = useState<boolean>(false);\n    const containerRef = useRef<HTMLDivElement>(null);\n    const { breakpoint } = useResponsiveContainer(containerRef);\n    const isMobile = breakpoint === \"mobile\";\n\n    if (!src) return null;\n\n    return (\n      <div\n        ref={(node) => {\n          (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n          if (typeof ref === \"function\") ref(node);\n          else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n        }}\n        className={clsx(\n          \"openui-image-block-wrapper\",\n          {\n            \"openui-image-block-wrapper--mobile\": isMobile,\n            \"openui-image-block-wrapper--error\": hasError,\n          },\n          className,\n        )}\n        style={\n          src && !hasError ? ({ \"--bg-image\": `url(${src})` } as React.CSSProperties) : undefined\n        }\n        {...rest}\n      >\n        <img\n          src={src}\n          alt={alt}\n          className={clsx(\"openui-image-block-image\", {\n            \"openui-image-block-image--mobile\": isMobile,\n            \"openui-image-block-image--error\": hasError,\n          })}\n          onLoad={() => {\n            setIsImageLoading(false);\n            setHasError(false);\n          }}\n          onError={() => {\n            setIsImageLoading(false);\n            setHasError(true);\n          }}\n        />\n        {isImageLoading && <div className=\"openui-image-block-loader\" />}\n      </div>\n    );\n  },\n);\n\nImageBlock.displayName = \"ImageBlock\";\n","import clsx from \"clsx\";\nimport { ChevronLeft, ChevronRight, X } from \"lucide-react\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { IconButton } from \"../IconButton\";\nimport { useTheme } from \"../ThemeProvider\";\nimport { ImageItem } from \"./ImageGallery\";\n\nexport interface GalleryModalProps {\n  images: ImageItem[];\n  selectedImageIndex: number;\n  setSelectedImageIndex: (index: number) => void;\n  onClose: () => void;\n}\n\nexport const GalleryModal: React.FC<GalleryModalProps> = ({\n  images,\n  selectedImageIndex,\n  setSelectedImageIndex,\n  onClose,\n}) => {\n  const [scrollButtons, setScrollButtons] = useState({ showLeft: false, showRight: false });\n  const carouselRef = useRef<HTMLDivElement>(null);\n  const modalContentRef = useRef<HTMLDivElement>(null);\n  const { portalThemeClassName } = useTheme();\n\n  // Check if scrolling is needed\n  const checkScroll = useCallback(() => {\n    if (!carouselRef.current) return;\n\n    const container = carouselRef.current;\n    setScrollButtons({\n      showLeft: container.scrollLeft > 0,\n      showRight: container.scrollLeft + container.offsetWidth < container.scrollWidth,\n    });\n  }, []);\n\n  useEffect(() => {\n    if (!carouselRef.current) {\n      return;\n    }\n\n    const container = carouselRef.current;\n    // Initial check\n    checkScroll();\n\n    const resizeObserver = new ResizeObserver(checkScroll);\n    resizeObserver.observe(container);\n\n    container.addEventListener(\"scroll\", checkScroll);\n\n    return () => {\n      container.removeEventListener(\"scroll\", checkScroll);\n      resizeObserver.disconnect();\n    };\n  }, [checkScroll]);\n\n  // Handle modal lifecycle events (scroll lock, close on escape, close on outside click)\n  useEffect(() => {\n    // Disable body scroll\n    document.body.style.overflow = \"hidden\";\n\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (e.key === \"Escape\") {\n        onClose();\n      }\n    };\n\n    const handleOutsideClick = (e: MouseEvent) => {\n      if (modalContentRef.current && !modalContentRef.current.contains(e.target as Node)) {\n        onClose();\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    document.addEventListener(\"mousedown\", handleOutsideClick);\n\n    // Cleanup\n    return () => {\n      document.body.style.overflow = \"auto\";\n      document.removeEventListener(\"keydown\", handleKeyDown);\n      document.removeEventListener(\"mousedown\", handleOutsideClick);\n    };\n  }, [onClose]);\n\n  const scroll = (direction: \"left\" | \"right\") => {\n    if (carouselRef.current) {\n      const container = carouselRef.current;\n      const containerRect = container.getBoundingClientRect();\n      const scrollAmount = containerRect.width * 0.28;\n\n      if (direction === \"left\") {\n        container.scrollBy({\n          left: -scrollAmount,\n          behavior: \"smooth\",\n        });\n      } else {\n        container.scrollBy({\n          left: scrollAmount,\n          behavior: \"smooth\",\n        });\n      }\n    }\n  };\n\n  // Memoize thumbnail click handler\n  const handleThumbnailClick = useCallback(\n    (index: number) => () => setSelectedImageIndex(index),\n    [setSelectedImageIndex],\n  );\n\n  return createPortal(\n    <div className={clsx(\"openui-gallery__modal\", portalThemeClassName)}>\n      <div\n        className=\"openui-gallery__modal-content\"\n        ref={modalContentRef}\n        role=\"dialog\"\n        aria-modal=\"true\"\n        aria-labelledby=\"openui-gallery-modal-heading\"\n      >\n        <div className=\"openui-gallery__modal-header\">\n          <span id=\"openui-gallery-modal-heading\" className=\"openui-gallery__modal-heading\">\n            All Photos\n          </span>\n          <IconButton\n            size=\"small\"\n            variant=\"secondary\"\n            icon={<X />}\n            onClick={onClose}\n            aria-label=\"Close gallery\"\n          />\n        </div>\n        <div className=\"openui-gallery__modal-main\">\n          <img\n            src={images[selectedImageIndex]?.src}\n            alt={images[selectedImageIndex]?.alt || `Gallery image ${selectedImageIndex + 1}`}\n          />\n        </div>\n        <div className=\"openui-gallery__modal-carousel-container\">\n          {scrollButtons.showLeft && (\n            <div\n              className={clsx(\n                \"openui-gallery__modal-carousel-button-container\",\n                \"openui-gallery__modal-carousel-button-container-left\",\n              )}\n            >\n              <IconButton\n                className={clsx(\n                  \"openui-gallery__carousel-button\",\n                  \"openui-gallery__carousel-button--left\",\n                )}\n                onClick={() => scroll(\"left\")}\n                aria-label=\"Scroll images left\"\n                icon={<ChevronLeft />}\n                variant=\"secondary\"\n                size=\"extra-small\"\n              />\n            </div>\n          )}\n\n          <div className=\"openui-gallery__modal-carousel\" ref={carouselRef}>\n            {images.map((image, index) => (\n              <div\n                key={index}\n                className={clsx(\n                  \"openui-gallery__modal-thumbnail\",\n                  index === selectedImageIndex && \"openui-gallery__modal-thumbnail--active\",\n                )}\n                role=\"button\"\n                tabIndex={0}\n                aria-label={image.alt || `Gallery image ${index + 1}`}\n                aria-pressed={index === selectedImageIndex}\n                onClick={handleThumbnailClick(index)}\n                onKeyDown={(e) => {\n                  if (e.key === \"Enter\" || e.key === \" \") {\n                    e.preventDefault();\n                    handleThumbnailClick(index)();\n                  }\n                }}\n              >\n                <img src={image.src} alt=\"\" aria-hidden=\"true\" />\n              </div>\n            ))}\n          </div>\n\n          {scrollButtons.showRight && (\n            <div\n              className={clsx(\n                \"openui-gallery__modal-carousel-button-container\",\n                \"openui-gallery__modal-carousel-button-container-right\",\n              )}\n            >\n              <IconButton\n                className={clsx(\n                  \"openui-gallery__carousel-button\",\n                  \"openui-gallery__carousel-button--right\",\n                )}\n                onClick={() => scroll(\"right\")}\n                aria-label=\"Scroll images right\"\n                icon={<ChevronRight />}\n                variant=\"secondary\"\n                size=\"extra-small\"\n              />\n            </div>\n          )}\n        </div>\n      </div>\n    </div>,\n    document.body,\n  );\n};\n","import clsx from \"clsx\";\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { Button } from \"../Button\";\nimport { GalleryModal } from \"./GalleryModal\";\n\nexport interface ImageItem {\n  src: string;\n  alt?: string;\n  details?: string;\n}\n\nexport interface OpenUIGalleryProps {\n  images: ImageItem[];\n}\n\nconst MAX_GRID_IMAGES = 5;\nconst getLayoutClassName = (imageCount: number): string => {\n  switch (imageCount) {\n    case 1:\n      return \"openui-gallery--single\";\n    case 2:\n      return \"openui-gallery--double\";\n    case 3:\n      return \"openui-gallery--triple\";\n    case 4:\n      return \"openui-gallery--quad\";\n    default:\n      return \"openui-gallery--default\";\n  }\n};\n\nexport const ImageGallery: React.FC<OpenUIGalleryProps> = ({ images }) => {\n  const [showAll, setShowAll] = useState(false);\n  const [selectedImageIndex, setSelectedImageIndex] = useState(0);\n\n  // Memoize layout class to prevent recalculation\n  const layoutClass = useMemo(() => getLayoutClassName(images.length), [images.length]);\n\n  // Memoize whether to show button\n  const shouldShowButton = useMemo(() => images.length > MAX_GRID_IMAGES, [images.length]);\n\n  // Memoize visible images\n  const visibleImages = useMemo(() => images.slice(0, MAX_GRID_IMAGES), [images]);\n\n  // Memoize callbacks\n  const toggleShowAll = useCallback(() => {\n    setShowAll((prev) => !prev);\n  }, []);\n\n  const handleImageClick = useCallback((index: number) => {\n    setSelectedImageIndex(index);\n    setShowAll(true);\n  }, []);\n\n  const setSelectedImageIndexMemoized = useCallback((index: number) => {\n    setSelectedImageIndex(index);\n  }, []);\n\n  return (\n    <div className={clsx(\"openui-gallery\", layoutClass)}>\n      <div className=\"openui-gallery__grid\">\n        {visibleImages.map((image, index) => (\n          <div\n            key={index}\n            className={clsx(\"openui-gallery__image\", index === 0 && \"openui-gallery__image--main\")}\n            onClick={() => handleImageClick(index)}\n          >\n            <img src={image.src} alt={image.alt || `Gallery image ${index + 1}`} />\n          </div>\n        ))}\n        {shouldShowButton && (\n          <div className=\"openui-gallery__show-all-button\">\n            <Button variant=\"primary\" size=\"small\" onClick={toggleShowAll}>\n              Show All\n            </Button>\n          </div>\n        )}\n      </div>\n\n      {showAll && (\n        <GalleryModal\n          images={images}\n          selectedImageIndex={selectedImageIndex}\n          setSelectedImageIndex={setSelectedImageIndexMemoized}\n          onClose={toggleShowAll}\n        />\n      )}\n    </div>\n  );\n};\n","import clsx from \"clsx\";\nimport React from \"react\";\nimport { useFormControlContext } from \"../FormControl/context\";\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n  styles?: React.CSSProperties;\n  className?: string;\n  size?: \"small\" | \"medium\" | \"large\";\n  hasError?: boolean;\n}\n\nconst sizes = {\n  small: \"openui-input-small\",\n  medium: \"openui-input-medium\",\n  large: \"openui-input-large\",\n} as const;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n  ({ className, styles, size = \"medium\", hasError, ...props }, ref) => {\n    const ctx = useFormControlContext();\n    const resolvedHasError = hasError ?? ctx?.hasError ?? false;\n    return (\n      <input\n        autoComplete=\"off\"\n        ref={ref}\n        className={clsx(\"openui-input\", sizes[size], className, {\n          \"openui-input-error\": resolvedHasError,\n        })}\n        style={styles}\n        {...props}\n      />\n    );\n  },\n);\n\nInput.displayName = \"Input\";\n","import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\n\nexport interface LabelProps extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {\n  children: React.ReactNode;\n  className?: string;\n  style?: React.CSSProperties;\n  disabled?: boolean;\n  required?: boolean;\n}\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n  ({ children, className, style, disabled, required, ...props }, ref) => {\n    return (\n      <LabelPrimitive.Root\n        ref={ref}\n        className={clsx(\n          \"openui-label\",\n          {\n            \"openui-label-disabled\": disabled,\n          },\n          className,\n        )}\n        style={style}\n        {...props}\n      >\n        {children}\n        {required && <span className=\"openui-label-required-asterisk\">*</span>}\n      </LabelPrimitive.Root>\n    );\n  },\n);\n\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import clsx from \"clsx\";\nimport {\n  Children,\n  cloneElement,\n  CSSProperties,\n  forwardRef,\n  isValidElement,\n  ReactElement,\n} from \"react\";\nimport { ListItemProps, ListItemVariant } from \"../ListItem\";\n\nexport interface ListBlockProps {\n  /** Controls the indicator shown on every ListItem. Defaults to \"number\". */\n  variant?: ListItemVariant;\n  children: ReactElement<ListItemProps> | ReactElement<ListItemProps>[];\n  className?: string;\n  style?: CSSProperties;\n}\n\nconst ListBlock = forwardRef<HTMLDivElement, ListBlockProps>((props, ref) => {\n  const { children, variant = \"number\", className, style } = props;\n\n  const childArray = Children.toArray(children);\n  const listHasSubtitle = childArray.some(\n    (child) => isValidElement(child) && !!(child as ReactElement<ListItemProps>).props.subtitle,\n  );\n\n  const enhancedChildren = Children.map(children, (child, index) => {\n    if (isValidElement(child)) {\n      return cloneElement(child as ReactElement<ListItemProps>, {\n        variant,\n        listHasSubtitle,\n        index,\n      });\n    }\n    return child;\n  });\n\n  return (\n    <div ref={ref} className={clsx(\"openui-list-block\", className)} style={style}>\n      {enhancedChildren}\n    </div>\n  );\n});\n\nListBlock.displayName = \"ListBlock\";\n\nexport { ListBlock };\n","import clsx from \"clsx\";\nimport React, { CSSProperties, ReactNode } from \"react\";\n\nexport type ListItemVariant = \"icon\" | \"image\" | \"number\";\n\nexport interface ListItemProps {\n  className?: string;\n  style?: CSSProperties;\n  title?: ReactNode;\n  subtitle?: ReactNode;\n  variant?: ListItemVariant;\n  icon?: ReactNode;\n  image?: { src?: string; alt: string };\n  index?: number;\n  listHasSubtitle?: boolean;\n  actionLabel?: ReactNode;\n  actionIcon?: ReactNode;\n  onClick?: () => void;\n}\n\nconst ListItem = React.forwardRef<HTMLDivElement, ListItemProps>((props, ref) => {\n  const {\n    className,\n    style,\n    variant = \"number\",\n    icon,\n    image,\n    index = 0,\n    listHasSubtitle,\n    title,\n    subtitle,\n    actionIcon,\n    actionLabel,\n    onClick,\n    ...rest\n  } = props;\n\n  const hasAction = !!onClick;\n\n  return (\n    <div\n      ref={ref}\n      className={clsx(\n        \"openui-list-item-wrapper\",\n        hasAction && \"openui-list-item-wrapper-with-action\",\n        className,\n      )}\n      style={style}\n      {...rest}\n    >\n      <div\n        className={clsx(\"openui-list-item\", hasAction && \"openui-list-item-clickable\")}\n        onClick={onClick}\n        role={hasAction ? \"button\" : undefined}\n        tabIndex={hasAction ? 0 : undefined}\n      >\n        <div\n          className={clsx(\n            \"openui-list-item-indicator\",\n            !listHasSubtitle && \"openui-list-item-indicator-no-subtitle\",\n            hasAction && \"openui-list-item-indicator-clickable\",\n          )}\n        >\n          {variant === \"number\" && (\n            <div className=\"openui-list-item-indicator-number\">{index + 1}</div>\n          )}\n          {variant === \"icon\" && icon}\n          {variant === \"image\" && image && (image.src || image.alt) && (\n            <div className=\"openui-list-item-indicator-image\">\n              <img src={image.src} alt={image.alt} width={40} height={40} />\n            </div>\n          )}\n        </div>\n        <div className=\"openui-list-item-content-wrapper\">\n          <div className=\"openui-list-item-content\">\n            {title && <div className=\"openui-list-item-title\">{title}</div>}\n            {subtitle && <div className=\"openui-list-item-subtitle\">{subtitle}</div>}\n          </div>\n          {hasAction && (actionIcon || actionLabel) && (\n            <div className=\"openui-list-item-action\">\n              {actionLabel && <div className=\"openui-list-item-action-label\">{actionLabel}</div>}\n              {actionIcon && <div className=\"openui-list-item-action-icon\">{actionIcon}</div>}\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n});\n\nListItem.displayName = \"ListItem\";\n\nexport { ListItem };\n","import clsx from \"clsx\";\nimport { LayoutContextProvider } from \"../../context/LayoutContext\";\nimport { ShellStoreProvider } from \"../_shared/store\";\n\ninterface ContainerProps {\n  children?: React.ReactNode;\n  logoUrl: string;\n  agentName: string;\n  className?: string;\n  showAssistantLogo?: boolean;\n  /** Control the open state of the tray */\n  isOpen?: boolean;\n}\n\nexport const Container = ({\n  children,\n  logoUrl,\n  agentName,\n  className,\n  showAssistantLogo = false,\n  isOpen = false,\n}: ContainerProps) => {\n  return (\n    <ShellStoreProvider\n      logoUrl={logoUrl}\n      agentName={agentName}\n      showAssistantLogo={showAssistantLogo}\n    >\n      <LayoutContextProvider layout=\"tray\">\n        <div\n          className={clsx(\n            \"openui-bottom-tray-container\",\n            {\n              \"openui-bottom-tray-container--open\": isOpen,\n              \"openui-bottom-tray-container--closed\": !isOpen,\n            },\n            className,\n          )}\n        >\n          {children}\n        </div>\n      </LayoutContextProvider>\n    </ShellStoreProvider>\n  );\n};\n","import { useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ArrowUp, Lightbulb } from \"lucide-react\";\nimport { Fragment, ReactNode, isValidElement } from \"react\";\nimport { ConversationStarterIcon, ConversationStarterProps } from \"../../types/ConversationStarter\";\nimport { Carousel, CarouselContent } from \"../Carousel\";\nimport { isChatEmpty } from \"../_shared/utils\";\n\nexport type ConversationStarterVariant = \"short\" | \"long\";\n\ninterface ConversationStarterItemProps extends ConversationStarterProps {\n  onClick: (prompt: string) => void;\n  variant: ConversationStarterVariant;\n}\n\n/**\n * Renders the appropriate icon based on the icon prop value\n * - undefined: Show default lightbulb icon\n * - ReactNode: Show the provided icon (use <></> or React.Fragment for no icon)\n */\nconst renderIcon = (icon: ConversationStarterIcon | undefined): ReactNode => {\n  if (icon === undefined) {\n    return <Lightbulb size={16} />;\n  }\n  return icon;\n};\n\nconst hasRenderableIcon = (icon: ReactNode): boolean => {\n  if (icon === null || icon === undefined || icon === false) {\n    return false;\n  }\n\n  if (isValidElement<{ children?: ReactNode }>(icon) && icon.type === Fragment) {\n    return Boolean(icon.props.children);\n  }\n\n  return true;\n};\n\nconst ConversationStarterItem = ({\n  displayText,\n  prompt,\n  onClick,\n  variant,\n  icon,\n}: ConversationStarterItemProps) => {\n  const renderedIcon = renderIcon(icon);\n  const shouldRenderIcon = hasRenderableIcon(renderedIcon);\n\n  if (variant === \"short\") {\n    return (\n      <button\n        type=\"button\"\n        className=\"openui-bottom-tray-conversation-starter-item-short\"\n        onClick={() => onClick(prompt)}\n      >\n        {shouldRenderIcon && (\n          <span className=\"openui-bottom-tray-conversation-starter-item-short__icon\">\n            {renderedIcon}\n          </span>\n        )}\n        <span className=\"openui-bottom-tray-conversation-starter-item-short__text\">\n          {displayText}\n        </span>\n      </button>\n    );\n  }\n\n  // Long variant (detailed list style)\n  return (\n    <button\n      type=\"button\"\n      className=\"openui-bottom-tray-conversation-starter-item-long\"\n      onClick={() => onClick(prompt)}\n    >\n      <div className=\"openui-bottom-tray-conversation-starter-item-long__content\">\n        {shouldRenderIcon && (\n          <span className=\"openui-bottom-tray-conversation-starter-item-long__icon\">\n            {renderedIcon}\n          </span>\n        )}\n        <span className=\"openui-bottom-tray-conversation-starter-item-long__text\">\n          {displayText}\n        </span>\n      </div>\n      <span className=\"openui-bottom-tray-conversation-starter-item-long__arrow\">\n        <ArrowUp size={16} />\n      </span>\n    </button>\n  );\n};\n\nexport interface ConversationStarterContainerProps {\n  starters: ConversationStarterProps[];\n  className?: string;\n  /**\n   * Variant of the conversation starter\n   * - \"short\": Pill-style horizontal buttons (default)\n   * - \"long\": List items with icons and hover arrow\n   */\n  variant?: ConversationStarterVariant;\n}\n\nexport const ConversationStarter = ({\n  starters,\n  className,\n  variant = \"short\",\n}: ConversationStarterContainerProps) => {\n  const processMessage = useThread((s) => s.processMessage);\n  const isRunning = useThread((s) => s.isRunning);\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  const handleClick = (prompt: string) => {\n    if (isRunning) return;\n    processMessage({\n      role: \"user\",\n      content: prompt,\n    });\n  };\n\n  // Only show when there are no messages\n  if (!isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  if (starters.length === 0) {\n    return null;\n  }\n\n  if (variant === \"short\") {\n    return (\n      <Carousel\n        showButtons={false}\n        className={clsx(\n          \"openui-bottom-tray-conversation-starter\",\n          \"openui-bottom-tray-conversation-starter--short\",\n          className,\n        )}\n      >\n        <CarouselContent className=\"openui-bottom-tray-conversation-starter__carousel-content\">\n          {starters.map((item, index) => (\n            <ConversationStarterItem\n              key={`${item.displayText}-${index}`}\n              displayText={item.displayText}\n              prompt={item.prompt}\n              icon={item.icon}\n              onClick={handleClick}\n              variant={variant}\n            />\n          ))}\n        </CarouselContent>\n      </Carousel>\n    );\n  }\n\n  return (\n    <div\n      className={clsx(\n        \"openui-bottom-tray-conversation-starter\",\n        `openui-bottom-tray-conversation-starter--${variant}`,\n        className,\n      )}\n    >\n      {starters.map((item, index) => (\n        <Fragment key={`${item.displayText}-${index}`}>\n          <ConversationStarterItem\n            displayText={item.displayText}\n            prompt={item.prompt}\n            icon={item.icon}\n            onClick={handleClick}\n            variant={variant}\n          />\n        </Fragment>\n      ))}\n    </div>\n  );\n};\n\nexport default ConversationStarter;\n","import { useThreadList } from \"@openuidev/react-headless\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport clsx from \"clsx\";\nimport { EllipsisVerticalIcon, MenuIcon, Trash2Icon } from \"lucide-react\";\nimport { useEffect } from \"react\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { useTheme } from \"../ThemeProvider\";\n\nconst ThreadItem = ({\n  title,\n  isSelected,\n  onSelect,\n  onDelete,\n}: {\n  title: string;\n  isSelected: boolean;\n  onSelect: () => void;\n  onDelete: () => void;\n}) => {\n  const { portalThemeClassName } = useTheme();\n  return (\n    <div\n      className={clsx(\"openui-bottom-tray-thread-item\", {\n        \"openui-bottom-tray-thread-item--selected\": isSelected,\n      })}\n    >\n      <button className=\"openui-bottom-tray-thread-item-title\" onClick={onSelect}>\n        {title}\n      </button>\n      <DropdownMenu.Root>\n        <DropdownMenu.Trigger asChild>\n          <IconButton\n            icon={<EllipsisVerticalIcon size=\"1em\" />}\n            aria-label={`More actions for ${title}`}\n            variant=\"tertiary\"\n            size=\"extra-small\"\n            className=\"openui-bottom-tray-thread-item-menu-trigger\"\n          />\n        </DropdownMenu.Trigger>\n        <DropdownMenu.Portal>\n          <DropdownMenu.Content\n            className={clsx(\"openui-bottom-tray-thread-item-menu\", portalThemeClassName)}\n            side=\"right\"\n            align=\"start\"\n            sideOffset={4}\n          >\n            <DropdownMenu.Item\n              asChild\n              onSelect={(e) => {\n                e.stopPropagation();\n                onDelete();\n              }}\n            >\n              <Button\n                type=\"button\"\n                variant=\"tertiary\"\n                buttonType=\"destructive\"\n                size=\"small\"\n                iconLeft={<Trash2Icon size={14} />}\n                className=\"openui-bottom-tray-thread-item-menu-action\"\n              >\n                Delete\n              </Button>\n            </DropdownMenu.Item>\n          </DropdownMenu.Content>\n        </DropdownMenu.Portal>\n      </DropdownMenu.Root>\n    </div>\n  );\n};\n\nexport const ThreadListContainer = () => {\n  const threads = useThreadList((s) => s.threads);\n  const selectedThreadId = useThreadList((s) => s.selectedThreadId);\n  const loadThreads = useThreadList((s) => s.loadThreads);\n  const selectThread = useThreadList((s) => s.selectThread);\n  const deleteThread = useThreadList((s) => s.deleteThread);\n  const { portalThemeClassName } = useTheme();\n\n  useEffect(() => {\n    loadThreads();\n  }, [loadThreads]);\n\n  return (\n    <DropdownMenu.Root>\n      <DropdownMenu.Trigger asChild>\n        <IconButton\n          icon={<MenuIcon size=\"1em\" />}\n          variant=\"tertiary\"\n          aria-label=\"Thread list\"\n          className=\"openui-bottom-tray-thread-list-trigger\"\n        />\n      </DropdownMenu.Trigger>\n      <DropdownMenu.Portal>\n        <DropdownMenu.Content\n          className={clsx(\"openui-bottom-tray-thread-list-dropdown\", portalThemeClassName)}\n          side=\"bottom\"\n          align=\"end\"\n          sideOffset={8}\n        >\n          <div className=\"openui-bottom-tray-thread-list-header\">All threads</div>\n          <div className=\"openui-bottom-tray-thread-list-items\">\n            {threads.map((thread) => (\n              <ThreadItem\n                key={thread.id}\n                title={thread.title}\n                isSelected={selectedThreadId === thread.id}\n                onSelect={() => selectThread(thread.id)}\n                onDelete={() => deleteThread(thread.id)}\n              />\n            ))}\n            {threads.length === 0 && (\n              <div className=\"openui-bottom-tray-thread-list-empty\">No threads yet</div>\n            )}\n          </div>\n        </DropdownMenu.Content>\n      </DropdownMenu.Portal>\n    </DropdownMenu.Root>\n  );\n};\n","import { useThreadList } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { SquarePen, X } from \"lucide-react\";\nimport { ReactNode } from \"react\";\nimport { IconButton } from \"../IconButton\";\nimport { useShellStore } from \"../_shared/store\";\nimport { ThreadListContainer } from \"./ThreadListContainer\";\n\nexport const BottomTrayNewChatButton = () => {\n  const switchToNewThread = useThreadList((s) => s.switchToNewThread);\n\n  return (\n    <IconButton\n      icon={<SquarePen size=\"1em\" />}\n      onClick={switchToNewThread}\n      variant=\"tertiary\"\n      aria-label=\"New chat\"\n      className=\"openui-bottom-tray-header-new-chat-button\"\n    />\n  );\n};\n\ninterface HeaderProps {\n  className?: string;\n  /** Custom content to render on the rightmost side of the logo container */\n  rightChildren?: ReactNode;\n  /** Callback when minimize button is clicked */\n  onMinimize?: () => void;\n  /** Hide the minimize button */\n  hideMinimizeButton?: boolean;\n  /** Custom new chat button */\n  hideNewChatButton?: boolean;\n  /** Hide the thread list container */\n  hideThreadListContainer?: boolean;\n}\n\nexport const Header = ({\n  className,\n  rightChildren,\n  onMinimize,\n  hideMinimizeButton = false,\n  hideNewChatButton = false,\n  hideThreadListContainer = false,\n}: HeaderProps) => {\n  const { logoUrl, agentName } = useShellStore((state) => ({\n    logoUrl: state.logoUrl,\n    agentName: state.agentName,\n  }));\n\n  return (\n    <div className={clsx(\"openui-bottom-tray-header\", className)}>\n      <div className=\"openui-bottom-tray-header-logo-container\">\n        <img className=\"openui-bottom-tray-header-logo\" src={logoUrl} alt=\"Logo\" />\n        <span className=\"openui-bottom-tray-header-agent-name\">{agentName}</span>\n      </div>\n      <div className=\"openui-bottom-tray-header-actions\">\n        {rightChildren}\n        {!hideThreadListContainer && <ThreadListContainer />}\n        {!hideNewChatButton && <BottomTrayNewChatButton />}\n        {!hideMinimizeButton && onMinimize && (\n          <IconButton\n            icon={<X size=\"1em\" />}\n            onClick={onMinimize}\n            variant=\"tertiary\"\n            aria-label=\"Minimize chat\"\n            className=\"openui-bottom-tray-header-minimize\"\n          />\n        )}\n      </div>\n    </div>\n  );\n};\n","import { useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ArrowUp, Square } from \"lucide-react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { useComposerState } from \"../../../hooks/useComposerState\";\nimport { IconButton } from \"../../IconButton\";\n\nexport interface ComposerProps {\n  className?: string;\n  placeholder?: string;\n}\n\nexport const Composer = ({ className, placeholder = \"Type your message...\" }: ComposerProps) => {\n  const { textContent, setTextContent } = useComposerState();\n  const processMessage = useThread((s) => s.processMessage);\n  const cancelMessage = useThread((s) => s.cancelMessage);\n  const isRunning = useThread((s) => s.isRunning);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n  const inputRef = useRef<HTMLTextAreaElement>(null);\n\n  const handleSubmit = () => {\n    if (!textContent.trim() || isRunning || isLoadingMessages) {\n      return;\n    }\n\n    processMessage({\n      role: \"user\",\n      content: textContent,\n    });\n\n    setTextContent(\"\");\n  };\n\n  useLayoutEffect(() => {\n    const input = inputRef.current;\n    if (!input) return;\n\n    // Reset to 0 (not \"auto\") so scrollHeight reflects content, not container\n    input.style.height = \"0px\";\n    input.style.height = `${Math.max(input.scrollHeight, 24)}px`;\n  }, [textContent]);\n\n  return (\n    <div\n      className={clsx(\"openui-bottom-tray-thread-composer\", className)}\n      data-drafting={textContent.length > 0 || undefined}\n      onClick={(e) => {\n        if (!(e.target as HTMLElement).closest(\"button, a, [role='button']\")) {\n          inputRef.current?.focus();\n        }\n      }}\n    >\n      <div className=\"openui-bottom-tray-thread-composer__input-wrapper\">\n        <textarea\n          ref={inputRef}\n          value={textContent}\n          onChange={(e) => setTextContent(e.target.value)}\n          className=\"openui-bottom-tray-thread-composer__input\"\n          placeholder={placeholder}\n          rows={1}\n          onKeyDown={(e) => {\n            if (e.key === \"Enter\" && !e.shiftKey) {\n              e.preventDefault();\n              handleSubmit();\n            }\n          }}\n        />\n        <div className=\"openui-bottom-tray-thread-composer__action-bar\">\n          <IconButton\n            onClick={isRunning ? cancelMessage : handleSubmit}\n            icon={isRunning ? <Square size=\"1em\" fill=\"currentColor\" /> : <ArrowUp size=\"1em\" />}\n            size=\"extra-small\"\n            variant=\"primary\"\n            className=\"openui-bottom-tray-thread-composer__submit-button\"\n          />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Composer;\n","import type { AssistantMessage, Message, ToolMessage } from \"@openuidev/react-headless\";\nimport { MessageProvider, useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport React, { memo, useRef } from \"react\";\nimport { ScrollVariant, useScrollToBottom } from \"../../hooks/useScrollToBottom\";\nimport { ArtifactOverlay } from \"../_shared/artifact\";\nimport type { AssistantMessageComponent, UserMessageComponent } from \"../_shared/types\";\nimport { MarkDownRenderer } from \"../MarkDownRenderer\";\nimport { MessageLoading as MessageLoadingComponent } from \"../MessageLoading\";\nimport { ToolCallComponent } from \"../ToolCall\";\nimport { ToolResult } from \"../ToolResult\";\n\nexport const ThreadContainer = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  return (\n    <div\n      className={clsx(\"openui-bottom-tray-thread-container\", className)}\n      style={{\n        visibility: isLoadingMessages ? \"hidden\" : undefined,\n      }}\n    >\n      {children}\n      <ArtifactOverlay />\n    </div>\n  );\n};\n\nexport const ScrollArea = ({\n  children,\n  className,\n  scrollVariant = \"user-message-anchor\",\n  userMessageSelector = \".openui-bottom-tray-thread-message-user\",\n}: {\n  children?: React.ReactNode;\n  className?: string;\n  /**\n   * Scroll to bottom once the last message is added\n   */\n  scrollVariant?: ScrollVariant;\n  /**\n   * Selector for the user message\n   */\n  userMessageSelector?: string;\n}) => {\n  const ref = useRef<HTMLDivElement>(null);\n\n  const messages = useThread((s) => s.messages);\n  const isRunning = useThread((s) => s.isRunning);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  useScrollToBottom({\n    ref,\n    lastMessage: messages[messages.length - 1] || { id: \"\" },\n    scrollVariant,\n    userMessageSelector,\n    isRunning,\n    isLoadingMessages,\n  });\n\n  return (\n    <div className=\"openui-bottom-tray-thread-scroll-container\">\n      <div\n        ref={ref}\n        className={clsx(\n          \"openui-bottom-tray-thread-scroll-area\",\n          {\n            \"openui-bottom-tray-thread-scroll-area--user-message-anchor\":\n              scrollVariant === \"user-message-anchor\",\n          },\n          className,\n        )}\n      >\n        {children}\n      </div>\n    </div>\n  );\n};\n\nexport const AssistantMessageContainer = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  return (\n    <div className={clsx(\"openui-bottom-tray-thread-message-assistant\", className)}>\n      <div className=\"openui-bottom-tray-thread-message-assistant__content\">{children}</div>\n    </div>\n  );\n};\n\nexport const UserMessageContainer = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  return (\n    <div className={clsx(\"openui-bottom-tray-thread-message-user\", className)}>\n      <div className=\"openui-bottom-tray-thread-message-user__content\">{children}</div>\n    </div>\n  );\n};\n\nconst AssistantMessageContent = ({\n  message,\n  allMessages,\n}: {\n  message: AssistantMessage;\n  allMessages: Message[];\n}) => {\n  const getToolName = (toolCallId: string) => {\n    const toolCall = message.toolCalls?.find((tc) => tc.id === toolCallId);\n    return toolCall?.function.name;\n  };\n\n  const toolMessages: ToolMessage[] = [];\n  const msgIndex = allMessages.findIndex((m) => m.id === message.id);\n  if (msgIndex !== -1) {\n    for (let i = msgIndex + 1; i < allMessages.length; i++) {\n      const m = allMessages[i];\n      if (m && m.role === \"tool\") {\n        toolMessages.push(m as ToolMessage);\n      } else {\n        break;\n      }\n    }\n  }\n\n  return (\n    <>\n      {message.content && (\n        <MarkDownRenderer\n          textMarkdown={message.content}\n          className=\"openui-bottom-tray-thread-message-assistant__text\"\n        />\n      )}\n      {message.toolCalls?.map((toolCall) => (\n        <ToolCallComponent key={toolCall.id} toolCall={toolCall} />\n      ))}\n      {toolMessages.map((tm) => (\n        <ToolResult key={tm.id} message={tm} toolName={getToolName(tm.toolCallId)} />\n      ))}\n    </>\n  );\n};\n\nconst UserMessageContent = ({ message }: { message: Message }) => {\n  if (message.role !== \"user\") return null;\n  const content = message.content;\n  if (typeof content === \"string\") {\n    return <>{content}</>;\n  }\n  return (\n    <>\n      {content?.map((part, i) => {\n        if (part.type === \"text\") {\n          return <span key={i}>{part.text}</span>;\n        }\n        if (part.type === \"binary\" && part.url) {\n          return (\n            <img\n              key={i}\n              src={part.url}\n              alt=\"\"\n              className=\"openui-bottom-tray-thread-message-user__image\"\n            />\n          );\n        }\n        return null;\n      })}\n    </>\n  );\n};\n\nexport const RenderMessage = memo(\n  ({\n    message,\n    className,\n    allMessages,\n    assistantMessage: CustomAssistantMessage,\n    userMessage: CustomUserMessage,\n    isStreaming,\n  }: {\n    message: Message;\n    className?: string;\n    allMessages: Message[];\n    assistantMessage?: AssistantMessageComponent;\n    userMessage?: UserMessageComponent;\n    isStreaming: boolean;\n  }) => {\n    if (message.role === \"tool\") {\n      return null;\n    }\n\n    if (message.role === \"assistant\") {\n      if (CustomAssistantMessage) {\n        return <CustomAssistantMessage message={message} isStreaming={isStreaming} />;\n      }\n      return (\n        <AssistantMessageContainer className={className}>\n          <AssistantMessageContent message={message} allMessages={allMessages} />\n        </AssistantMessageContainer>\n      );\n    }\n\n    if (message.role === \"user\") {\n      if (CustomUserMessage) {\n        return <CustomUserMessage message={message} />;\n      }\n      return (\n        <UserMessageContainer className={className}>\n          <UserMessageContent message={message} />\n        </UserMessageContainer>\n      );\n    }\n\n    return null;\n  },\n);\n\nexport const MessageLoading = () => {\n  return (\n    <div className=\"openui-bottom-tray-thread-message-loading\">\n      <MessageLoadingComponent />\n    </div>\n  );\n};\n\nexport const Messages = ({\n  className,\n  loader,\n  assistantMessage,\n  userMessage,\n}: {\n  className?: string;\n  loader?: React.ReactNode;\n  assistantMessage?: AssistantMessageComponent;\n  userMessage?: UserMessageComponent;\n}) => {\n  const messages = useThread((s) => s.messages);\n  const isRunning = useThread((s) => s.isRunning);\n\n  return (\n    <div className={clsx(\"openui-bottom-tray-thread-messages\", className)}>\n      {messages.map((message, i) => {\n        return (\n          <MessageProvider key={message.id} message={message}>\n            <RenderMessage\n              message={message}\n              allMessages={messages}\n              assistantMessage={assistantMessage}\n              userMessage={userMessage}\n              isStreaming={isRunning && i === messages.length - 1}\n            />\n          </MessageProvider>\n        );\n      })}\n      {isRunning && <div>{loader}</div>}\n    </div>\n  );\n};\n\n// Re-export Composer from components\nexport { Composer } from \"./components\";\n","import clsx from \"clsx\";\nimport { ChevronDown } from \"lucide-react\";\nimport React, { forwardRef } from \"react\";\n\ninterface TriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  /** Whether the tray is currently open (used for mobile styling) */\n  isOpen?: boolean;\n}\n\nexport const Trigger = forwardRef<HTMLButtonElement, TriggerProps>(\n  (\n    { children, className, isOpen = false, \"aria-label\": ariaLabel = \"Open chat\", ...rest },\n    ref,\n  ) => {\n    return (\n      <button\n        ref={ref}\n        className={clsx(\n          \"openui-bottom-tray-trigger\",\n          { \"openui-bottom-tray-trigger--open\": isOpen },\n          className,\n        )}\n        aria-label={ariaLabel}\n        {...rest}\n      >\n        {children || <ChevronDown size={24} />}\n      </button>\n    );\n  },\n);\n","import { useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ReactNode } from \"react\";\nimport { isChatEmpty } from \"../_shared/utils\";\n\ninterface WelcomeScreenBaseProps {\n  /**\n   * Additional CSS class name\n   */\n  className?: string;\n}\n\ninterface WelcomeScreenWithContentProps extends WelcomeScreenBaseProps {\n  /**\n   * The greeting/title text to display\n   */\n  title?: string;\n  /**\n   * Optional description text to add more context\n   */\n  description?: string;\n  /**\n   * Image to display - can be a URL object or a ReactNode\n   * - { url: string }: Renders an <img> tag with default styling (64x64, object-fit: cover, rounded)\n   * - ReactNode: Renders the provided element directly (for custom icons, styled images, etc.)\n   */\n  image?: { url: string } | ReactNode;\n  /**\n   * Children are not allowed when using props-based content\n   */\n  children?: never;\n}\n\ninterface WelcomeScreenWithChildrenProps extends WelcomeScreenBaseProps {\n  /**\n   * Custom content to render inside the welcome screen\n   * When children are provided, title, description, and image are ignored\n   */\n  children: ReactNode;\n  title?: never;\n  description?: never;\n  image?: never;\n}\n\nexport type WelcomeScreenProps = WelcomeScreenWithContentProps | WelcomeScreenWithChildrenProps;\n\n/**\n * Type guard to check if image is a URL object\n */\nconst isImageUrl = (image: { url: string } | ReactNode): image is { url: string } => {\n  return typeof image === \"object\" && image !== null && \"url\" in image;\n};\n\nexport const WelcomeScreen = (props: WelcomeScreenProps) => {\n  const { className } = props;\n\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  // Only show when there are no messages\n  if (!isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  // Check if children are provided\n  if (\"children\" in props && props.children) {\n    return (\n      <div className={clsx(\"openui-bottom-tray-welcome-screen\", className)}>{props.children}</div>\n    );\n  }\n\n  // Props-based content\n  const { title, description, image } = props as WelcomeScreenWithContentProps;\n\n  const renderImage = () => {\n    if (!image) return null;\n\n    if (isImageUrl(image)) {\n      return (\n        <img\n          src={image.url}\n          alt={title || \"\"}\n          className=\"openui-bottom-tray-welcome-screen__image\"\n        />\n      );\n    }\n\n    return image;\n  };\n\n  return (\n    <div className={clsx(\"openui-bottom-tray-welcome-screen\", className)}>\n      {image && (\n        <div className=\"openui-bottom-tray-welcome-screen__image-container\">{renderImage()}</div>\n      )}\n      {(title || description) && (\n        <div className=\"openui-bottom-tray-welcome-screen__content\">\n          {title && <h2 className=\"openui-bottom-tray-welcome-screen__title\">{title}</h2>}\n          {description && (\n            <p className=\"openui-bottom-tray-welcome-screen__description\">{description}</p>\n          )}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default WelcomeScreen;\n","import { useThread } from \"@openuidev/react-headless\";\nimport type { ComposerComponent } from \"./types\";\n\nexport const CustomComposerAdapter = ({ composer: Composer }: { composer: ComposerComponent }) => {\n  const processMessage = useThread((s) => s.processMessage);\n  const cancelMessage = useThread((s) => s.cancelMessage);\n  const isRunning = useThread((s) => s.isRunning);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  return (\n    <Composer\n      onSend={(message: string) => {\n        processMessage({ role: \"user\", content: message });\n      }}\n      onCancel={cancelMessage}\n      isRunning={isRunning}\n      isLoadingMessages={isLoadingMessages}\n    />\n  );\n};\n","import * as Dialog from \"@radix-ui/react-dialog\";\nimport clsx from \"clsx\";\nimport { Check, Copy, Link, Loader2, X } from \"lucide-react\";\nimport { forwardRef, type ReactNode, useCallback, useState } from \"react\";\nimport { useLayoutContext } from \"../../context/LayoutContext\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { Input } from \"../Input\";\nimport { useTheme } from \"../ThemeProvider/ThemeProvider\";\n\n/**\n * Props for {@link ShareThreadModal}.\n *\n * @category Components\n */\nexport interface ShareThreadModalProps {\n  /** Modal title. Defaults to `\"Share chat\"`. */\n  title?: string;\n  /** The trigger element that opens the modal. */\n  trigger: ReactNode;\n  /** Async function that returns a shareable URL. */\n  generateLink: () => Promise<string>;\n  /** Theme class name for portal targeting. */\n  themeClassName?: string;\n}\n\nconst getErrorMessage = (error: Error) => {\n  if (error instanceof DOMException && error.name === \"NotAllowedError\") {\n    return \"Clipboard access denied. Please allow clipboard access in your browser settings, or copy the link manually from the text area above.\";\n  } else if (error instanceof DOMException && error.name === \"NotSupportedError\") {\n    return \"Clipboard not supported. Please copy the link manually from the text area above.\";\n  } else {\n    return \"Failed to copy to clipboard. Please copy the link manually from the text area above.\";\n  }\n};\n\n/**\n * Modal dialog for generating and copying a shareable link.\n *\n * @category Components\n */\nexport const ShareThreadModal = forwardRef<HTMLDivElement, ShareThreadModalProps>(\n  ({ title, trigger, generateLink, themeClassName }, _ref) => {\n    const { portalThemeClassName } = useTheme();\n    const { layout } = useLayoutContext() || {};\n    const isMobile = layout === \"mobile\";\n\n    const [isOpen, setIsOpen] = useState(false);\n    const [isLoading, setIsLoading] = useState(false);\n    const [generatedLink, setGeneratedLink] = useState<string | null>(null);\n    const [hasCopied, setHasCopied] = useState(false);\n    const [clipboardError, setClipboardError] = useState<string | null>(null);\n\n    const handleGenerateLink = useCallback(async () => {\n      setIsLoading(true);\n      try {\n        const link = await generateLink();\n        setGeneratedLink(link);\n      } catch (_error) {\n        // Consumer handles errors in their generateLink callback\n        console.error(_error);\n      } finally {\n        setIsLoading(false);\n      }\n    }, [generateLink]);\n\n    const handleCopy = useCallback(async () => {\n      if (!generatedLink) return;\n      setClipboardError(null);\n\n      if (!navigator.clipboard) {\n        setClipboardError(\n          \"Clipboard access not available. Please copy the link manually from the text area above.\",\n        );\n        return;\n      }\n\n      try {\n        await navigator.clipboard.writeText(generatedLink);\n        setHasCopied(true);\n        setTimeout(() => setHasCopied(false), 2000);\n      } catch (error) {\n        console.warn(\"Copy to clipboard failed:\", error);\n        setClipboardError(getErrorMessage(error as Error));\n      }\n    }, [generatedLink]);\n\n    const handleOnOpenChange = useCallback((open: boolean) => {\n      setIsOpen(open);\n      if (!open) {\n        setTimeout(() => {\n          setIsLoading(false);\n          setGeneratedLink(null);\n          setHasCopied(false);\n          setClipboardError(null);\n        }, 300);\n      }\n    }, []);\n\n    const renderActionButton = () => {\n      if (isLoading) {\n        return (\n          <Button onClick={handleCopy} size=\"medium\" disabled>\n            <Loader2 className=\"openui-share-thread-modal__loading-icon\" />\n            Generating...\n          </Button>\n        );\n      }\n\n      if (generatedLink) {\n        return (\n          <Button onClick={handleCopy} size=\"medium\">\n            {hasCopied ? <Check /> : <Copy />}\n            {hasCopied ? \"Copied!\" : \"Copy link\"}\n          </Button>\n        );\n      }\n\n      return (\n        <Button onClick={handleGenerateLink} size=\"medium\">\n          <Link />\n          Generate link\n        </Button>\n      );\n    };\n\n    return (\n      <Dialog.Root open={isOpen} onOpenChange={handleOnOpenChange}>\n        <Dialog.Trigger asChild>{trigger}</Dialog.Trigger>\n        <Dialog.Portal>\n          <Dialog.Overlay\n            className={clsx(\n              \"openui-share-thread-modal__overlay\",\n              themeClassName || portalThemeClassName,\n            )}\n          />\n          <Dialog.Content\n            className={clsx(\n              \"openui-share-thread-modal__content\",\n              isMobile ? \"openui-share-thread-modal__content--mobile\" : \"\",\n              themeClassName || portalThemeClassName,\n            )}\n          >\n            <div className=\"openui-share-thread-modal__header\">\n              <Dialog.Title className=\"openui-share-thread-modal__title\">\n                {title ?? \"Share chat\"}\n              </Dialog.Title>\n              <IconButton\n                icon={<X />}\n                variant=\"tertiary\"\n                size=\"small\"\n                onClick={() => handleOnOpenChange(false)}\n                className=\"openui-share-thread-modal__close-button\"\n              />\n            </div>\n\n            <div className=\"openui-share-thread-modal__body\">\n              <p className=\"openui-share-thread-modal__description\">\n                This conversation may include personal information. Take a moment to check the\n                content before sharing the link.\n              </p>\n\n              <div className=\"openui-share-thread-modal__input-section\">\n                <div className=\"openui-share-thread-modal__input-wrapper\">\n                  <Input\n                    value={generatedLink || \"\"}\n                    placeholder={\n                      generatedLink ? \"\" : 'Click \"Generate link\" to create a shareable link'\n                    }\n                    readOnly\n                    className=\"openui-share-thread-modal__input\"\n                  />\n                  <div className=\"openui-share-thread-modal__button-container\">\n                    {renderActionButton()}\n                  </div>\n                </div>\n\n                {clipboardError && (\n                  <p className=\"openui-share-thread-modal__error-message\">{clipboardError}</p>\n                )}\n              </div>\n            </div>\n          </Dialog.Content>\n        </Dialog.Portal>\n      </Dialog.Root>\n    );\n  },\n);\n\nShareThreadModal.displayName = \"ShareThreadModal\";\n","import { useThread, useThreadList } from \"@openuidev/react-headless\";\nimport { useCallback } from \"react\";\n\n/**\n * Hook for sharing conversation threads by threadId.\n * The consumer's backend looks up messages by threadId.\n *\n * @category Hooks\n */\nexport const useShareThread = ({\n  generateShareLink,\n}: {\n  generateShareLink: (threadId: string) => Promise<string>;\n}) => {\n  const { isRunning, isLoadingMessages, messages } = useThread();\n  const { selectedThreadId } = useThreadList();\n\n  const getShareThreadLink = useCallback(async () => {\n    if (!selectedThreadId) throw new Error(\"No thread selected\");\n    return generateShareLink(selectedThreadId);\n  }, [generateShareLink, selectedThreadId]);\n\n  return {\n    shouldDisableShareButton: isRunning || isLoadingMessages || !selectedThreadId,\n    hasMessages: messages.length > 0,\n    getShareThreadLink,\n  };\n};\n","import { Share2 } from \"lucide-react\";\nimport React, { type ReactNode } from \"react\";\nimport { useLayoutContext } from \"../../context/LayoutContext\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { useTheme } from \"../ThemeProvider/ThemeProvider\";\nimport { ShareThreadModal } from \"./ShareThreadModal\";\nimport { useShareThread } from \"./useShareThread\";\n\n/**\n * Props for {@link ShareThread}.\n *\n * @category Components\n */\nexport interface ShareThreadProps {\n  /** Async function that receives the threadId and returns a shareable URL. */\n  generateShareLink: (threadId: string) => Promise<string>;\n  /** Title for the share modal. Defaults to `\"Share chat\"`. */\n  modalTitle?: string;\n  /** Custom trigger element. When omitted, a default share button is rendered. */\n  customTrigger?: ReactNode;\n}\n\n/**\n * Share button that opens a modal for generating and copying a shareable link.\n * Renders nothing when there are no messages to share.\n *\n * @category Components\n */\nexport const ShareThread = ({ generateShareLink, modalTitle, customTrigger }: ShareThreadProps) => {\n  const { layout } = useLayoutContext() || {};\n  const isMobile = layout === \"mobile\";\n  const { portalThemeClassName } = useTheme();\n\n  const { hasMessages, getShareThreadLink, shouldDisableShareButton } = useShareThread({\n    generateShareLink,\n  });\n\n  if (!hasMessages) return null;\n\n  return (\n    <ShareThreadModal\n      title={modalTitle}\n      trigger={\n        customTrigger ?? (\n          <DefaultShareButton\n            isMobile={isMobile}\n            shouldDisableShareButton={shouldDisableShareButton}\n          />\n        )\n      }\n      generateLink={getShareThreadLink}\n      themeClassName={portalThemeClassName}\n    />\n  );\n};\n\nShareThread.displayName = \"ShareThread\";\n\ntype DefaultShareButtonProps = {\n  isMobile: boolean;\n  shouldDisableShareButton?: boolean;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst DefaultShareButton = React.forwardRef<HTMLButtonElement, DefaultShareButtonProps>(\n  ({ isMobile, shouldDisableShareButton, ...props }, ref) => {\n    return isMobile ? (\n      <IconButton\n        ref={ref as React.RefObject<HTMLButtonElement>}\n        size=\"medium\"\n        icon={<Share2 size=\"1em\" />}\n        variant=\"secondary\"\n        disabled={shouldDisableShareButton}\n        {...props}\n      />\n    ) : (\n      <Button\n        ref={ref as React.RefObject<HTMLButtonElement>}\n        variant=\"secondary\"\n        disabled={shouldDisableShareButton}\n        {...props}\n      >\n        <Share2 />\n        Share\n      </Button>\n    );\n  },\n);\n\nDefaultShareButton.displayName = \"DefaultShareButton\";\n","import { WelcomeMessageConfig } from \"../types\";\n\n/**\n * Type guard to check if a WelcomeMessageConfig is a custom React component.\n *\n * Use this to differentiate between a custom component and a props-based\n * configuration when rendering the welcome message.\n *\n * @param config - The welcome message configuration to check\n * @returns `true` if config is a React component, `false` if it's a props object\n *\n * @example\n * if (isWelcomeComponent(welcomeMessage)) {\n *   // welcomeMessage is a React.ComponentType\n *   const CustomWelcome = welcomeMessage;\n *   return <CustomWelcome />;\n * } else {\n *   // welcomeMessage is { title?, description?, image? }\n *   return <WelcomeScreen {...welcomeMessage} />;\n * }\n */\nexport const isWelcomeComponent = (\n  config: WelcomeMessageConfig,\n): config is React.ComponentType<any> => {\n  return typeof config === \"function\";\n};\n\nexport { isChatEmpty } from \"../../_shared/utils\";\n","const openTag = (tag: string) => `<${tag}>`;\nconst closeTag = (tag: string) => `</${tag}>`;\n\nexport function wrapContent(text: string): string {\n  return `${openTag(\"content\")}${text}${closeTag(\"content\")}`;\n}\n\nexport function wrapContext(json: string): string {\n  return `${openTag(\"context\")}${json}${closeTag(\"context\")}`;\n}\n\n/**\n * Separate openui-lang code from <context> tag in a message.\n * Returns { content: the message/code, contextString: raw JSON or null }\n */\nexport function separateContentAndContext(raw: string): {\n  content: string;\n  contextString: string | null;\n} {\n  const contextMatch = raw.match(/<context>([\\s\\S]*)<\\/context>\\s*$/);\n  let content = raw;\n  let contextString: string | null = null;\n\n  if (contextMatch) {\n    contextString = contextMatch[1] ?? null;\n    content = raw.slice(0, contextMatch.index!).trimEnd();\n  }\n\n  const contentMatch = content.match(/^<content[^>]*>([\\s\\S]*)<\\/content>\\s*$/);\n  if (contentMatch) {\n    content = contentMatch[1] ?? content;\n  }\n\n  return { content, contextString };\n}\n","import { useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ArrowUp, Square } from \"lucide-react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { useComposerState } from \"../../../hooks/useComposerState\";\nimport { IconButton } from \"../../IconButton\";\n\nexport interface ComposerProps {\n  className?: string;\n  placeholder?: string;\n}\n\nexport const Composer = ({ className, placeholder = \"Type your query here\" }: ComposerProps) => {\n  const { textContent, setTextContent } = useComposerState();\n  const processMessage = useThread((s) => s.processMessage);\n  const cancelMessage = useThread((s) => s.cancelMessage);\n  const isRunning = useThread((s) => s.isRunning);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n  const inputRef = useRef<HTMLTextAreaElement>(null);\n\n  const handleSubmit = () => {\n    if (!textContent.trim() || isRunning || isLoadingMessages) {\n      return;\n    }\n\n    processMessage({\n      role: \"user\",\n      content: textContent,\n    });\n\n    setTextContent(\"\");\n  };\n\n  useLayoutEffect(() => {\n    const input = inputRef.current;\n    if (!input) return;\n\n    // Reset to 0 (not \"auto\") so scrollHeight reflects content, not container\n    input.style.height = \"0px\";\n    input.style.height = `${Math.max(input.scrollHeight, 24)}px`;\n  }, [textContent]);\n\n  return (\n    <div\n      className={clsx(\"openui-shell-thread-composer\", className)}\n      data-drafting={textContent.length > 0 || undefined}\n      onClick={(e) => {\n        if (!(e.target as HTMLElement).closest(\"button, a, [role='button']\")) {\n          inputRef.current?.focus();\n        }\n      }}\n    >\n      <div className=\"openui-shell-thread-composer__input-wrapper\">\n        <textarea\n          ref={inputRef}\n          value={textContent}\n          onChange={(e) => setTextContent(e.target.value)}\n          className=\"openui-shell-thread-composer__input\"\n          placeholder={placeholder}\n          rows={1}\n          onKeyDown={(e) => {\n            if (e.key === \"Enter\" && !e.shiftKey) {\n              e.preventDefault();\n              handleSubmit();\n            }\n          }}\n        />\n        <div className=\"openui-shell-thread-composer__action-bar\">\n          <IconButton\n            onClick={isRunning ? cancelMessage : handleSubmit}\n            icon={isRunning ? <Square size=\"1em\" fill=\"currentColor\" /> : <ArrowUp size=\"1em\" />}\n            size=\"extra-small\"\n            variant=\"primary\"\n            aria-label={isRunning ? \"Cancel message\" : \"Send message\"}\n            className=\"openui-shell-thread-composer__submit-button\"\n          />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Composer;\n","import { useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ArrowUp, Square } from \"lucide-react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { useComposerState } from \"../../../hooks/useComposerState\";\nimport { IconButton } from \"../../IconButton\";\n\nexport interface DesktopWelcomeComposerProps {\n  className?: string;\n  placeholder?: string;\n}\n\nexport const DesktopWelcomeComposer = ({\n  className,\n  placeholder = \"Type your query here\",\n}: DesktopWelcomeComposerProps) => {\n  const { textContent, setTextContent } = useComposerState();\n  const processMessage = useThread((s) => s.processMessage);\n  const cancelMessage = useThread((s) => s.cancelMessage);\n  const isRunning = useThread((s) => s.isRunning);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n  const inputRef = useRef<HTMLTextAreaElement>(null);\n\n  const handleSubmit = () => {\n    if (!textContent.trim() || isRunning || isLoadingMessages) {\n      return;\n    }\n\n    processMessage({\n      role: \"user\",\n      content: textContent,\n    });\n\n    setTextContent(\"\");\n  };\n\n  useLayoutEffect(() => {\n    const input = inputRef.current;\n    if (!input) return;\n\n    // Reset to 0 (not \"auto\") so scrollHeight reflects content, not container\n    input.style.height = \"0px\";\n    input.style.height = `${Math.max(input.scrollHeight, 24)}px`;\n  }, [textContent]);\n\n  return (\n    <div\n      className={clsx(\"openui-shell-desktop-welcome-composer\", className)}\n      data-drafting={textContent.length > 0 || undefined}\n    >\n      <textarea\n        ref={inputRef}\n        value={textContent}\n        onChange={(e) => setTextContent(e.target.value)}\n        className=\"openui-shell-desktop-welcome-composer__input\"\n        placeholder={placeholder}\n        rows={1}\n        onKeyDown={(e) => {\n          if (e.key === \"Enter\" && !e.shiftKey) {\n            e.preventDefault();\n            handleSubmit();\n          }\n        }}\n      />\n      <div className=\"openui-shell-desktop-welcome-composer__action-bar\">\n        <IconButton\n          onClick={isRunning ? cancelMessage : handleSubmit}\n          disabled={!textContent.trim() && !isRunning}\n          aria-label={isRunning ? \"Cancel\" : \"Send\"}\n          icon={isRunning ? <Square size=\"1em\" fill=\"currentColor\" /> : <ArrowUp size=\"1em\" />}\n          size=\"extra-small\"\n          variant=\"primary\"\n          className=\"openui-shell-desktop-welcome-composer__submit-button\"\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default DesktopWelcomeComposer;\n","import { useEffect, useState } from \"react\";\n\nexport const useElementSize = ({ ref }: { ref: React.RefObject<HTMLElement | null> }) => {\n  const [size, setSize] = useState<{ width: number; height: number }>({ width: 0, height: 0 });\n\n  useEffect(() => {\n    if (!ref.current) {\n      return;\n    }\n    const element = ref.current;\n    const handleResize = () => {\n      setSize({ width: element.clientWidth, height: element.clientHeight });\n    };\n\n    const resizeObserver = new ResizeObserver(handleResize);\n    resizeObserver.observe(element);\n\n    handleResize();\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [ref]);\n\n  return size;\n};\n","import clsx from \"clsx\";\nimport { useRef } from \"react\";\nimport { LayoutContextProvider } from \"../../context/LayoutContext\";\nimport { useElementSize } from \"../../hooks/useElementSize\";\nimport { ShellStoreProvider } from \"../_shared/store\";\n\ninterface ContainerProps {\n  children?: React.ReactNode;\n  logoUrl: string;\n  agentName: string;\n  className?: string;\n  showAssistantLogo?: boolean;\n}\n\nexport const Container = ({\n  children,\n  logoUrl,\n  agentName,\n  className,\n  showAssistantLogo = false,\n}: ContainerProps) => {\n  const ref = useRef<HTMLDivElement>(null);\n  const { width } = useElementSize({ ref }) || {};\n  // TODO: revisit this logic\n  const isMobile = width > 0 && width < 768;\n  const isFullScreen = width > 768;\n  const layout = isMobile ? \"mobile\" : isFullScreen ? \"fullscreen\" : \"tray\";\n\n  return (\n    <ShellStoreProvider\n      logoUrl={logoUrl}\n      agentName={agentName}\n      showAssistantLogo={showAssistantLogo}\n    >\n      <LayoutContextProvider layout={layout}>\n        <div\n          className={clsx(\n            \"openui-shell-container\",\n            {\n              \"openui-shell-container--mobile\": isMobile,\n            },\n            className,\n          )}\n          ref={ref}\n        >\n          {children}\n        </div>\n      </LayoutContextProvider>\n    </ShellStoreProvider>\n  );\n};\n","import { useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ArrowUp, Lightbulb } from \"lucide-react\";\nimport { Fragment, ReactNode, isValidElement } from \"react\";\nimport { ConversationStarterIcon, ConversationStarterProps } from \"../../types/ConversationStarter\";\nimport { Carousel, CarouselContent } from \"../Carousel\";\nimport { isChatEmpty } from \"../_shared/utils\";\n\nexport type ConversationStarterVariant = \"short\" | \"long\";\n\ninterface ConversationStarterItemProps extends ConversationStarterProps {\n  onClick: (prompt: string) => void;\n  variant: ConversationStarterVariant;\n}\n\n/**\n * Renders the appropriate icon based on the icon prop value\n * - undefined: Show default lightbulb icon\n * - ReactNode: Show the provided icon (use <></> or React.Fragment for no icon)\n */\nconst renderIcon = (icon: ConversationStarterIcon | undefined): ReactNode => {\n  if (icon === undefined) {\n    return <Lightbulb size={16} />;\n  }\n  return icon;\n};\n\nconst hasRenderableIcon = (icon: ReactNode): boolean => {\n  if (icon === null || icon === undefined || icon === false) {\n    return false;\n  }\n\n  if (isValidElement<{ children?: ReactNode }>(icon) && icon.type === Fragment) {\n    return Boolean(icon.props.children);\n  }\n\n  return true;\n};\n\nconst ConversationStarterItem = ({\n  displayText,\n  prompt,\n  onClick,\n  variant,\n  icon,\n}: ConversationStarterItemProps) => {\n  const renderedIcon = renderIcon(icon);\n  const shouldRenderIcon = hasRenderableIcon(renderedIcon);\n\n  if (variant === \"short\") {\n    return (\n      <button\n        type=\"button\"\n        className=\"openui-shell-conversation-starter-item-short\"\n        onClick={() => onClick(prompt)}\n      >\n        {shouldRenderIcon && (\n          <span className=\"openui-shell-conversation-starter-item-short__icon\">{renderedIcon}</span>\n        )}\n        <span className=\"openui-shell-conversation-starter-item-short__text\">{displayText}</span>\n      </button>\n    );\n  }\n\n  // Long variant (detailed list style)\n  return (\n    <button\n      type=\"button\"\n      className=\"openui-shell-conversation-starter-item-long\"\n      onClick={() => onClick(prompt)}\n    >\n      <div className=\"openui-shell-conversation-starter-item-long__content\">\n        {shouldRenderIcon && (\n          <span className=\"openui-shell-conversation-starter-item-long__icon\">{renderedIcon}</span>\n        )}\n        <span className=\"openui-shell-conversation-starter-item-long__text\">{displayText}</span>\n      </div>\n      <span className=\"openui-shell-conversation-starter-item-long__arrow\">\n        <ArrowUp size={16} />\n      </span>\n    </button>\n  );\n};\n\nexport interface ConversationStarterContainerProps {\n  starters: ConversationStarterProps[];\n  className?: string;\n  /**\n   * Variant of the conversation starter\n   * - \"short\": Pill-style buttons that wrap (default)\n   * - \"long\": Vertical list items with icons and hover arrow\n   */\n  variant?: ConversationStarterVariant;\n}\n\nexport const ConversationStarter = ({\n  starters,\n  className,\n  variant = \"short\",\n}: ConversationStarterContainerProps) => {\n  const processMessage = useThread((s) => s.processMessage);\n  const isRunning = useThread((s) => s.isRunning);\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  const handleClick = (prompt: string) => {\n    if (isRunning) return;\n    processMessage({\n      role: \"user\",\n      content: prompt,\n    });\n  };\n\n  // Only show when there are no messages\n  if (!isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  if (starters.length === 0) {\n    return null;\n  }\n\n  if (variant === \"short\") {\n    return (\n      <Carousel\n        showButtons={false}\n        className={clsx(\n          \"openui-shell-conversation-starter\",\n          \"openui-shell-conversation-starter--short\",\n          className,\n        )}\n      >\n        <CarouselContent className=\"openui-shell-conversation-starter__carousel-content\">\n          {starters.map((item, index) => (\n            <ConversationStarterItem\n              key={`${item.displayText}-${index}`}\n              displayText={item.displayText}\n              prompt={item.prompt}\n              icon={item.icon}\n              onClick={handleClick}\n              variant={variant}\n            />\n          ))}\n        </CarouselContent>\n      </Carousel>\n    );\n  }\n\n  return (\n    <div\n      className={clsx(\n        \"openui-shell-conversation-starter\",\n        `openui-shell-conversation-starter--${variant}`,\n        className,\n      )}\n    >\n      {starters.map((item, index) => (\n        <Fragment key={`${item.displayText}-${index}`}>\n          <ConversationStarterItem\n            displayText={item.displayText}\n            prompt={item.prompt}\n            icon={item.icon}\n            onClick={handleClick}\n            variant={variant}\n          />\n        </Fragment>\n      ))}\n    </div>\n  );\n};\n\nexport default ConversationStarter;\n","import { useThreadList } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { Menu, Plus } from \"lucide-react\";\nimport { ReactNode } from \"react\";\nimport { IconButton } from \"../IconButton\";\nimport { useShellStore } from \"../_shared/store\";\n\ninterface MobileHeaderProps {\n  className?: string;\n  rightChildren?: ReactNode;\n}\n\nexport const MobileHeader = ({ className, rightChildren }: MobileHeaderProps) => {\n  const switchToNewThread = useThreadList((s) => s.switchToNewThread);\n  const { logoUrl, agentName, setIsSidebarOpen } = useShellStore((state) => ({\n    logoUrl: state.logoUrl,\n    agentName: state.agentName,\n    setIsSidebarOpen: state.setIsSidebarOpen,\n  }));\n\n  return (\n    <div className={clsx(\"openui-shell-mobile-header\", className)}>\n      <IconButton\n        size=\"medium\"\n        icon={<Menu size=\"1em\" />}\n        onClick={() => setIsSidebarOpen(true)}\n        variant=\"secondary\"\n        aria-label=\"Open sidebar\"\n      />\n      <div className=\"openui-shell-mobile-header-logo-container\">\n        <img className=\"openui-shell-mobile-header-logo\" src={logoUrl} alt=\"Logo\" />\n        <span className=\"openui-shell-mobile-header-agent-name\">{agentName}</span>\n      </div>\n      <div className=\"openui-shell-mobile-header-actions\">\n        {rightChildren}\n        <IconButton\n          size=\"medium\"\n          icon={<Plus size=\"1em\" />}\n          onClick={switchToNewThread}\n          variant=\"secondary\"\n          aria-label=\"New chat\"\n        />\n      </div>\n    </div>\n  );\n};\n","import { useActiveArtifact } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { PanelLeftClose, PanelLeftOpen } from \"lucide-react\";\nimport { createContext, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useLayoutContext } from \"../../context/LayoutContext\";\nimport { IconButton } from \"../IconButton\";\nimport { useShellStore } from \"../_shared/store\";\n\nconst SIDEBAR_FADE_DURATION_MS = 90;\nconst SIDEBAR_RESIZE_DURATION_MS = 160;\n\ntype SidebarVisualState = \"expanded\" | \"collapsing\" | \"collapsed\" | \"expanding\";\n\nconst SidebarVisualStateContext = createContext<{\n  isCollapsedLayout: boolean;\n  visualState: SidebarVisualState;\n} | null>(null);\n\nexport const useOptionalSidebarVisualState = () => useContext(SidebarVisualStateContext);\n\nconst useSidebarVisualState = () => {\n  const context = useOptionalSidebarVisualState();\n  if (!context) {\n    throw new Error(\"useSidebarVisualState must be used within SidebarContainer\");\n  }\n  return context;\n};\n\nexport const SidebarContainer = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  const { isSidebarOpen, setIsSidebarOpen } = useShellStore((state) => ({\n    isSidebarOpen: state.isSidebarOpen,\n    setIsSidebarOpen: state.setIsSidebarOpen,\n  }));\n  const { isArtifactActive } = useActiveArtifact();\n  const { layout } = useLayoutContext() || {};\n  const isMobile = layout === \"mobile\";\n  const [isCollapsedLayout, setIsCollapsedLayout] = useState(!isSidebarOpen);\n  const [visualState, setVisualState] = useState<SidebarVisualState>(\n    isSidebarOpen ? \"expanded\" : \"collapsed\",\n  );\n  const animationTimeoutsRef = useRef<Array<ReturnType<typeof setTimeout>>>([]);\n  const previousIsMobileRef = useRef<boolean | null>(null);\n\n  const clearAnimationTimeouts = () => {\n    animationTimeoutsRef.current.forEach((timeoutId) => clearTimeout(timeoutId));\n    animationTimeoutsRef.current = [];\n  };\n\n  useEffect(() => {\n    return () => {\n      clearAnimationTimeouts();\n    };\n  }, []);\n\n  useEffect(() => {\n    clearAnimationTimeouts();\n\n    const justSwitchedLayout = previousIsMobileRef.current !== isMobile;\n    previousIsMobileRef.current = isMobile;\n\n    // On viewport breakpoint change, force sidebar open state and let the effect\n    // re-run with the new `isSidebarOpen` to drive the animation.\n    if (justSwitchedLayout) {\n      const targetOpen = !isMobile;\n      if (isSidebarOpen !== targetOpen) {\n        setIsSidebarOpen(targetOpen);\n        return;\n      }\n    }\n\n    if (isMobile) {\n      setIsCollapsedLayout(!isSidebarOpen);\n      setVisualState(isSidebarOpen ? \"expanded\" : \"collapsed\");\n      return;\n    }\n\n    if (isSidebarOpen) {\n      if (visualState === \"expanded\" && !isCollapsedLayout) {\n        return;\n      }\n\n      setIsCollapsedLayout(true);\n      setVisualState(\"expanding\");\n\n      animationTimeoutsRef.current.push(\n        setTimeout(() => {\n          setIsCollapsedLayout(false);\n          animationTimeoutsRef.current.push(\n            setTimeout(() => {\n              setVisualState(\"expanded\");\n            }, SIDEBAR_RESIZE_DURATION_MS),\n          );\n        }, SIDEBAR_FADE_DURATION_MS),\n      );\n\n      return;\n    }\n\n    if (visualState === \"collapsed\" && isCollapsedLayout) {\n      return;\n    }\n\n    setIsCollapsedLayout(false);\n    setVisualState(\"collapsing\");\n\n    animationTimeoutsRef.current.push(\n      setTimeout(() => {\n        setIsCollapsedLayout(true);\n        animationTimeoutsRef.current.push(\n          setTimeout(() => {\n            setVisualState(\"collapsed\");\n          }, SIDEBAR_RESIZE_DURATION_MS),\n        );\n      }, SIDEBAR_FADE_DURATION_MS),\n    );\n  }, [isMobile, isSidebarOpen]);\n\n  const contextValue = useMemo(\n    () => ({\n      isCollapsedLayout,\n      visualState,\n    }),\n    [isCollapsedLayout, visualState],\n  );\n\n  return (\n    <SidebarVisualStateContext.Provider value={contextValue}>\n      {isMobile && (\n        <div\n          className={clsx(\"openui-shell-sidebar-container__overlay\", {\n            \"openui-shell-sidebar-container__overlay--collapsed\": !isSidebarOpen,\n          })}\n          onClick={() => {\n            setIsSidebarOpen(false);\n          }}\n        />\n      )}\n      <div\n        className={clsx(\n          \"openui-shell-sidebar-container\",\n          {\n            \"openui-shell-sidebar-container--collapsed\": isCollapsedLayout,\n            \"openui-shell-sidebar-container--hidden\": isArtifactActive && !isMobile,\n          },\n          className,\n        )}\n        data-sidebar-visual-state={visualState}\n        onClick={() => {\n          if (!isMobile && isCollapsedLayout) {\n            setIsSidebarOpen(true);\n          }\n        }}\n      >\n        {children}\n      </div>\n    </SidebarVisualStateContext.Provider>\n  );\n};\n\nexport const SidebarHeader = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  const { agentName, logoUrl, setIsSidebarOpen, isSidebarOpen } = useShellStore((state) => ({\n    agentName: state.agentName,\n    logoUrl: state.logoUrl,\n    setIsSidebarOpen: state.setIsSidebarOpen,\n    isSidebarOpen: state.isSidebarOpen,\n  }));\n  const { isCollapsedLayout, visualState } = useSidebarVisualState();\n  const showExpandedIcon = visualState === \"expanded\" || visualState === \"collapsing\";\n\n  return (\n    <div\n      className={clsx(\n        \"openui-shell-sidebar-header\",\n        { \"openui-shell-sidebar-header--collapsed\": isCollapsedLayout },\n        className,\n      )}\n    >\n      <div className=\"openui-shell-sidebar-header__top-row\">\n        <img src={logoUrl} alt={agentName} className=\"openui-shell-sidebar-header__logo\" />\n        <div className=\"openui-shell-sidebar-header__agent-name\">{agentName}</div>\n        <IconButton\n          icon={showExpandedIcon ? <PanelLeftClose size=\"1em\" /> : <PanelLeftOpen size=\"1em\" />}\n          onClick={(e) => {\n            e.stopPropagation();\n            setIsSidebarOpen(!isSidebarOpen);\n          }}\n          size=\"small\"\n          variant=\"tertiary\"\n          aria-label={isSidebarOpen ? \"Collapse sidebar\" : \"Expand sidebar\"}\n          className=\"openui-shell-sidebar-header__toggle-button\"\n        />\n      </div>\n      {children}\n    </div>\n  );\n};\n\nexport const SidebarContent = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  const { isCollapsedLayout } = useSidebarVisualState();\n\n  return (\n    <div\n      className={clsx(\n        \"openui-shell-sidebar-content\",\n        { \"openui-shell-sidebar-content--collapsed\": isCollapsedLayout },\n        className,\n      )}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport const SidebarSeparator = () => {\n  return null;\n};\n","import { useThreadList } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { SquarePen } from \"lucide-react\";\nimport { useLayoutContext } from \"../../context/LayoutContext\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { useShellStore } from \"../_shared/store\";\nimport { useOptionalSidebarVisualState } from \"./Sidebar\";\n\nexport const NewChatButton = ({ className }: { className?: string }) => {\n  const switchToNewThread = useThreadList((s) => s.switchToNewThread);\n  const { isSidebarOpen } = useShellStore((state) => ({\n    isSidebarOpen: state.isSidebarOpen,\n  }));\n  const { layout } = useLayoutContext();\n  const sidebarVisualState = useOptionalSidebarVisualState();\n  const showExpandedButton = sidebarVisualState\n    ? sidebarVisualState.visualState === \"expanded\"\n    : isSidebarOpen;\n  const isMobile = layout === \"mobile\";\n\n  if (!showExpandedButton) {\n    return (\n      <IconButton\n        icon={<SquarePen size=\"1em\" />}\n        onClick={(e) => {\n          e.stopPropagation();\n          switchToNewThread();\n        }}\n        variant=\"secondary\"\n        size={isMobile ? \"medium\" : \"small\"}\n        className={clsx(\"openui-shell-new-chat-button_collapsed\", className)}\n      />\n    );\n  }\n\n  return (\n    <Button\n      className={clsx(\"openui-shell-new-chat-button\", className)}\n      iconLeft={<SquarePen />}\n      variant=\"secondary\"\n      size={isMobile ? \"medium\" : \"small\"}\n      onClick={switchToNewThread}\n    >\n      New Chat\n    </Button>\n  );\n};\n","import clsx from \"clsx\";\nimport { useEffect, useRef } from \"react\";\n\ninterface ResizableSeparatorProps {\n  onResize: (clientX: number) => void;\n  onDragStart: () => void;\n  onDragEnd: () => void;\n  className?: string;\n}\n\n/**\n * A draggable vertical separator for resizing panels.\n * Used between chat and artifact panels in desktop mode.\n */\nexport const ResizableSeparator = ({\n  onResize,\n  onDragStart,\n  onDragEnd,\n  className,\n}: ResizableSeparatorProps) => {\n  const isDraggingRef = useRef(false);\n  const onResizeRef = useRef(onResize);\n  const onDragStartRef = useRef(onDragStart);\n  const onDragEndRef = useRef(onDragEnd);\n\n  // Keep callback refs up to date without triggering effect re-runs\n  useEffect(() => {\n    onResizeRef.current = onResize;\n    onDragStartRef.current = onDragStart;\n    onDragEndRef.current = onDragEnd;\n  }, [onResize, onDragStart, onDragEnd]);\n\n  // Global mouse event handlers for drag behavior\n  // Uses refs instead of dependencies to avoid re-creating listeners\n  useEffect(() => {\n    const handleMouseMove = (e: MouseEvent) => {\n      if (isDraggingRef.current) {\n        e.preventDefault();\n        onResizeRef.current(e.clientX);\n      }\n    };\n\n    const handleMouseUp = () => {\n      if (isDraggingRef.current) {\n        isDraggingRef.current = false;\n        onDragEndRef.current();\n        // Reset cursor styles\n        document.body.style.cursor = \"\";\n        document.body.style.userSelect = \"\";\n      }\n    };\n\n    document.addEventListener(\"mousemove\", handleMouseMove);\n    document.addEventListener(\"mouseup\", handleMouseUp);\n\n    return () => {\n      document.removeEventListener(\"mousemove\", handleMouseMove);\n      document.removeEventListener(\"mouseup\", handleMouseUp);\n    };\n  }, []); // Empty deps - handlers use refs to access latest callbacks\n\n  const handleMouseDown = () => {\n    isDraggingRef.current = true;\n    onDragStartRef.current();\n    document.body.style.cursor = \"col-resize\";\n    document.body.style.userSelect = \"none\";\n  };\n\n  return (\n    <div\n      className={clsx(\"openui-shell-resizable-separator\", className)}\n      onMouseDown={handleMouseDown}\n    >\n      <div className=\"openui-shell-resizable-separator__handle\" />\n    </div>\n  );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\ninterface UseArtifactResizeProps {\n  isArtifactActive: boolean;\n  isMobile: boolean;\n  setIsSidebarOpen: (isOpen: boolean) => void;\n}\n\ninterface UseArtifactResizeReturn {\n  containerRef: React.RefObject<HTMLDivElement | null>;\n  chatPanelRef: React.RefObject<HTMLDivElement | null>;\n  artifactPanelRef: React.RefObject<HTMLDivElement | null>;\n  isDragging: boolean;\n  handleResize: (clientX: number) => void;\n  handleDragStart: () => void;\n  handleDragEnd: () => void;\n}\n\nconst INITIAL_CHAT_WIDTH = 420;\nconst MIN_CHAT_WIDTH = 420;\nconst MAX_CHAT_WIDTH_RATIO = 0.8;\n\n/**\n * Custom hook to manage artifact panel resizing logic (desktop only).\n * Handles:\n * - Chat panel width constraints\n * - Resize drag events\n * - Sidebar state when artifact is active/inactive\n */\nexport const useArtifactResize = ({\n  isArtifactActive,\n  isMobile,\n  setIsSidebarOpen,\n}: UseArtifactResizeProps): UseArtifactResizeReturn => {\n  const [isDragging, setIsDragging] = useState(false);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const chatPanelRef = useRef<HTMLDivElement>(null);\n  const artifactPanelRef = useRef<HTMLDivElement>(null);\n\n  // Handle sidebar visibility and panel widths when artifact state changes\n  useEffect(() => {\n    if (isMobile) return;\n\n    if (isArtifactActive) {\n      // Desktop artifact active: close sidebar and set chat width to 420px\n      setIsSidebarOpen(false);\n      if (chatPanelRef.current) {\n        chatPanelRef.current.style.width = `${INITIAL_CHAT_WIDTH}px`;\n      }\n    } else {\n      // Desktop artifact inactive: open sidebar and reset chat width\n      setIsSidebarOpen(true);\n      if (chatPanelRef.current) {\n        chatPanelRef.current.style.width = \"100%\";\n      }\n    }\n  }, [isArtifactActive, isMobile, setIsSidebarOpen]);\n\n  const handleResize = useCallback((clientX: number) => {\n    if (!containerRef.current || !chatPanelRef.current) return;\n\n    const containerRect = containerRef.current.getBoundingClientRect();\n    const newWidthPx = clientX - containerRect.left;\n\n    // Constrain width between min and max\n    const maxWidthPx = containerRect.width * MAX_CHAT_WIDTH_RATIO;\n    const constrainedWidth = Math.min(Math.max(newWidthPx, MIN_CHAT_WIDTH), maxWidthPx);\n\n    chatPanelRef.current.style.width = `${constrainedWidth}px`;\n  }, []);\n\n  const handleDragStart = useCallback(() => {\n    setIsDragging(true);\n  }, []);\n\n  const handleDragEnd = useCallback(() => {\n    setIsDragging(false);\n  }, []);\n\n  return {\n    containerRef,\n    chatPanelRef,\n    artifactPanelRef,\n    isDragging,\n    handleResize,\n    handleDragStart,\n    handleDragEnd,\n  };\n};\n","import type { AssistantMessage, Message, ToolMessage } from \"@openuidev/react-headless\";\nimport { MessageProvider, useActiveArtifact, useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport React, { memo, useRef } from \"react\";\nimport { useLayoutContext } from \"../../context/LayoutContext\";\nimport { ScrollVariant, useScrollToBottom } from \"../../hooks/useScrollToBottom\";\nimport { separateContentAndContext } from \"../../utils/contentParser\";\nimport { ArtifactOverlay, ArtifactPortalTarget } from \"../_shared/artifact\";\nimport { useShellStore } from \"../_shared/store\";\nimport type { AssistantMessageComponent, UserMessageComponent } from \"../_shared/types\";\nimport { Callout } from \"../Callout\";\nimport { MarkDownRenderer } from \"../MarkDownRenderer\";\nimport { MessageLoading as MessageLoadingComponent } from \"../MessageLoading\";\nimport { ToolCallComponent } from \"../ToolCall\";\nimport { ToolResult } from \"../ToolResult\";\nimport { ResizableSeparator } from \"./ResizableSeparator\";\nimport { useArtifactResize } from \"./useArtifactResize\";\n\nexport const ThreadContainer = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  const { layout } = useLayoutContext();\n  const isMobile = layout === \"mobile\";\n  const { isArtifactActive } = useActiveArtifact();\n\n  const { setIsSidebarOpen } = useShellStore((state) => ({\n    setIsSidebarOpen: state.setIsSidebarOpen,\n  }));\n\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  const {\n    containerRef,\n    chatPanelRef,\n    artifactPanelRef,\n    isDragging,\n    handleResize,\n    handleDragStart,\n    handleDragEnd,\n  } = useArtifactResize({\n    isArtifactActive,\n    isMobile,\n    setIsSidebarOpen,\n  });\n\n  return (\n    <div\n      className={clsx(\"openui-shell-thread-container\", className, {\n        \"openui-shell-thread-container--artifact-active\": isArtifactActive,\n      })}\n      style={{\n        visibility: isLoadingMessages ? \"hidden\" : undefined,\n      }}\n    >\n      <div className=\"openui-shell-thread-wrapper\" ref={containerRef}>\n        {/* Chat panel - always visible */}\n        <div\n          ref={chatPanelRef}\n          className={clsx(\"openui-shell-thread-chat-panel\", {\n            \"openui-shell-thread-chat-panel--animating\": !isDragging,\n          })}\n        >\n          {children}\n          {isMobile && <ArtifactOverlay />}\n        </div>\n\n        {/* Desktop only: Resizable separator and artifact panel */}\n        {!isMobile && isArtifactActive && (\n          <>\n            <ResizableSeparator\n              onResize={handleResize}\n              onDragStart={handleDragStart}\n              onDragEnd={handleDragEnd}\n            />\n            <div\n              ref={artifactPanelRef}\n              className={clsx(\"openui-shell-thread-artifact-panel\", {\n                \"openui-shell-thread-artifact-panel--animating\": !isDragging,\n              })}\n            >\n              <ArtifactPortalTarget />\n            </div>\n          </>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport const ScrollArea = ({\n  children,\n  className,\n  scrollVariant = \"user-message-anchor\",\n  userMessageSelector,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n  /**\n   * Scroll to bottom once the last message is added\n   */\n  scrollVariant?: ScrollVariant;\n  /**\n   * Selector for the user message\n   */\n  userMessageSelector?: string;\n}) => {\n  const ref = useRef<HTMLDivElement>(null);\n\n  const messages = useThread((s) => s.messages);\n  const isRunning = useThread((s) => s.isRunning);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  useScrollToBottom({\n    ref,\n    lastMessage: messages[messages.length - 1] || { id: \"\" },\n    scrollVariant,\n    userMessageSelector,\n    isRunning,\n    isLoadingMessages,\n  });\n\n  return (\n    <div className=\"openui-shell-thread-scroll-container\">\n      <div\n        ref={ref}\n        className={clsx(\n          \"openui-shell-thread-scroll-area\",\n          {\n            \"openui-shell-thread-scroll-area--user-message-anchor\":\n              scrollVariant === \"user-message-anchor\",\n          },\n          className,\n        )}\n      >\n        {children}\n      </div>\n    </div>\n  );\n};\n\nexport const AssistantMessageContainer = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  const { logoUrl, showAssistantLogo } = useShellStore((store) => ({\n    logoUrl: store.logoUrl,\n    showAssistantLogo: store.showAssistantLogo,\n  }));\n\n  return (\n    <div\n      className={clsx(\"openui-shell-thread-message-assistant\", className, {\n        \"openui-shell-thread-message-assistant--without-logo\": !showAssistantLogo,\n      })}\n    >\n      {showAssistantLogo && (\n        <img\n          src={logoUrl}\n          alt=\"Assistant\"\n          className=\"openui-shell-thread-message-assistant__logo\"\n        />\n      )}\n      <div className=\"openui-shell-thread-message-assistant__content\">{children}</div>\n    </div>\n  );\n};\n\nexport const UserMessageContainer = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  return (\n    <div className={clsx(\"openui-shell-thread-message-user\", className)}>\n      <div className=\"openui-shell-thread-message-user__content\">{children}</div>\n    </div>\n  );\n};\n\nconst AssistantMessageContent = ({\n  message,\n  allMessages,\n}: {\n  message: AssistantMessage;\n  allMessages: Message[];\n}) => {\n  // Find tool result messages that correspond to this message's tool calls\n  const getToolName = (toolCallId: string) => {\n    const toolCall = message.toolCalls?.find((tc) => tc.id === toolCallId);\n    return toolCall?.function.name;\n  };\n\n  // Collect tool messages that follow this assistant message\n  const toolMessages: ToolMessage[] = [];\n  const msgIndex = allMessages.findIndex((m) => m.id === message.id);\n  if (msgIndex !== -1) {\n    for (let i = msgIndex + 1; i < allMessages.length; i++) {\n      const m = allMessages[i];\n      if (m && m.role === \"tool\") {\n        toolMessages.push(m as ToolMessage);\n      } else {\n        break;\n      }\n    }\n  }\n\n  return (\n    <>\n      {message.content && (\n        <MarkDownRenderer\n          textMarkdown={message.content}\n          className=\"openui-shell-thread-message-assistant__text\"\n        />\n      )}\n      {message.toolCalls?.map((toolCall) => (\n        <ToolCallComponent key={toolCall.id} toolCall={toolCall} />\n      ))}\n      {toolMessages.map((tm) => (\n        <ToolResult key={tm.id} message={tm} toolName={getToolName(tm.toolCallId)} />\n      ))}\n    </>\n  );\n};\n\nconst UserMessageContent = ({ message }: { message: Message }) => {\n  if (message.role !== \"user\") return null;\n  const content = message.content;\n  if (typeof content === \"string\") {\n    // Strip XML wrapper tags (<content>, <context>) so the bubble shows clean text\n    const { content: humanText } = separateContentAndContext(content);\n    return <>{humanText}</>;\n  }\n  // InputContent[] — render text parts\n  return (\n    <>\n      {content?.map((part, i) => {\n        if (part.type === \"text\") {\n          return <span key={i}>{part.text}</span>;\n        }\n        // Binary content — could be image, file, etc.\n        if (part.type === \"binary\" && part.url) {\n          return (\n            <img\n              key={i}\n              src={part.url}\n              alt=\"\"\n              className=\"openui-shell-thread-message-user__image\"\n            />\n          );\n        }\n        return null;\n      })}\n    </>\n  );\n};\n\nexport const RenderMessage = memo(\n  ({\n    message,\n    className,\n    allMessages,\n    assistantMessage: CustomAssistantMessage,\n    userMessage: CustomUserMessage,\n    isStreaming,\n  }: {\n    message: Message;\n    className?: string;\n    allMessages: Message[];\n    assistantMessage?: AssistantMessageComponent;\n    userMessage?: UserMessageComponent;\n    isStreaming: boolean;\n  }) => {\n    if (message.role === \"tool\") {\n      // Tool messages are rendered inline with their parent assistant message\n      return null;\n    }\n\n    if (message.role === \"assistant\") {\n      if (CustomAssistantMessage) {\n        return <CustomAssistantMessage message={message} isStreaming={isStreaming} />;\n      }\n      return (\n        <AssistantMessageContainer className={className}>\n          <AssistantMessageContent message={message} allMessages={allMessages} />\n        </AssistantMessageContainer>\n      );\n    }\n\n    if (message.role === \"user\") {\n      if (CustomUserMessage) {\n        return <CustomUserMessage message={message} />;\n      }\n      return (\n        <UserMessageContainer className={className}>\n          <UserMessageContent message={message} />\n        </UserMessageContainer>\n      );\n    }\n\n    // Other roles (system, developer, reasoning, activity) — skip by default\n    return null;\n  },\n);\n\nexport const MessageLoading = () => {\n  return (\n    <div className=\"openui-shell-thread-message-loading\">\n      <MessageLoadingComponent />\n    </div>\n  );\n};\n\nexport const ThreadError = () => {\n  const threadError = useThread((s) => s.threadError);\n  if (!threadError) return null;\n\n  return (\n    <div className=\"openui-shell-thread-error\">\n      <Callout\n        variant=\"danger\"\n        title=\"Something went wrong\"\n        description={threadError.message || \"An unexpected error occurred. Please try again.\"}\n      />\n    </div>\n  );\n};\n\nexport const Messages = ({\n  className,\n  loader,\n  assistantMessage,\n  userMessage,\n}: {\n  className?: string;\n  loader?: React.ReactNode;\n  assistantMessage?: AssistantMessageComponent;\n  userMessage?: UserMessageComponent;\n}) => {\n  const messages = useThread((s) => s.messages);\n  const isRunning = useThread((s) => s.isRunning);\n  const threadError = useThread((s) => s.threadError);\n\n  return (\n    <div className={clsx(\"openui-shell-thread-messages\", className)}>\n      {messages.map((message, i) => {\n        return (\n          <MessageProvider key={message.id} message={message}>\n            <RenderMessage\n              message={message}\n              allMessages={messages}\n              assistantMessage={assistantMessage}\n              userMessage={userMessage}\n              isStreaming={isRunning && i === messages.length - 1}\n            />\n          </MessageProvider>\n        );\n      })}\n      {isRunning && <div>{loader}</div>}\n      {!isRunning && threadError && <ThreadError />}\n    </div>\n  );\n};\n\nexport const ThreadHeader = ({\n  children,\n  className,\n}: {\n  children?: React.ReactNode;\n  className?: string;\n}) => {\n  return <div className={clsx(\"openui-shell-thread-header\", className)}>{children}</div>;\n};\n\n// Re-export Composer from components\nexport { Composer } from \"./components\";\n","import type { Thread } from \"@openuidev/react-headless\";\nimport { useThreadList } from \"@openuidev/react-headless\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport clsx from \"clsx\";\nimport { EllipsisVerticalIcon, Trash2Icon } from \"lucide-react\";\nimport { Fragment, useEffect } from \"react\";\nimport { useLayoutContext } from \"../../context/LayoutContext\";\nimport { useShellStore } from \"../_shared/store\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { useTheme } from \"../ThemeProvider\";\n\nexport const ThreadButton = ({\n  id,\n  title,\n  className,\n}: {\n  id: string;\n  title: string;\n  className?: string;\n}) => {\n  const selectThread = useThreadList((s) => s.selectThread);\n  const deleteThread = useThreadList((s) => s.deleteThread);\n  const selectedThreadId = useThreadList((s) => s.selectedThreadId);\n  const { portalThemeClassName } = useTheme();\n  const { isSidebarOpen, setIsSidebarOpen } = useShellStore((state) => ({\n    isSidebarOpen: state.isSidebarOpen,\n    setIsSidebarOpen: state.setIsSidebarOpen,\n  }));\n  const { layout } = useLayoutContext();\n\n  return (\n    <div\n      className={clsx(\n        \"openui-shell-thread-button\",\n        {\n          \"openui-shell-thread-button--selected\": selectedThreadId === id,\n        },\n        className,\n      )}\n    >\n      <button\n        className=\"openui-shell-thread-button-title\"\n        onClick={() => {\n          if (layout === \"mobile\") {\n            setIsSidebarOpen(!isSidebarOpen);\n          }\n          selectThread(id);\n        }}\n      >\n        {title}\n      </button>\n      <DropdownMenu.Root>\n        <DropdownMenu.Trigger asChild>\n          <IconButton\n            icon={<EllipsisVerticalIcon size=\"1em\" />}\n            aria-label={`More actions for ${title}`}\n            variant=\"tertiary\"\n            size={layout === \"mobile\" ? \"small\" : \"extra-small\"}\n            className=\"openui-shell-thread-button-dropdown-trigger\"\n          />\n        </DropdownMenu.Trigger>\n        <DropdownMenu.Portal>\n          <DropdownMenu.Content\n            className={clsx(\"openui-shell-thread-button-dropdown-menu\", portalThemeClassName)}\n            side=\"bottom\"\n            align=\"end\"\n            sideOffset={4}\n          >\n            <DropdownMenu.Item\n              asChild\n              onSelect={() => {\n                deleteThread(id);\n              }}\n            >\n              <Button\n                type=\"button\"\n                variant=\"tertiary\"\n                buttonType=\"destructive\"\n                size=\"small\"\n                iconLeft={<Trash2Icon size={14} />}\n                className=\"openui-shell-thread-button-dropdown-menu-item\"\n              >\n                Delete\n              </Button>\n            </DropdownMenu.Item>\n          </DropdownMenu.Content>\n        </DropdownMenu.Portal>\n      </DropdownMenu.Root>\n    </div>\n  );\n};\n\nexport const ThreadList = ({ className }: { className?: string }) => {\n  const threads = useThreadList((s) => s.threads);\n  const loadThreads = useThreadList((s) => s.loadThreads);\n\n  useEffect(() => {\n    loadThreads();\n  }, []);\n\n  const groupThreads = () => {\n    const now = new Date();\n    const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n    const yesterday = new Date(today);\n    yesterday.setDate(yesterday.getDate() - 1);\n    const last7Days = new Date(today);\n    last7Days.setDate(last7Days.getDate() - 7);\n    const last30Days = new Date(today);\n    last30Days.setDate(last30Days.getDate() - 30);\n    const thisYear = new Date(today);\n    thisYear.setMonth(0, 1);\n\n    return threads.reduce(\n      (groups, thread) => {\n        const threadDate = new Date(thread.createdAt);\n\n        if (threadDate >= today) {\n          groups.today = [...(groups.today || []), thread];\n        } else if (threadDate >= yesterday) {\n          groups.yesterday = [...(groups.yesterday || []), thread];\n        } else if (threadDate >= last7Days) {\n          groups.last7Days = [...(groups.last7Days || []), thread];\n        } else if (threadDate >= last30Days) {\n          groups.last30Days = [...(groups.last30Days || []), thread];\n        } else if (threadDate >= thisYear) {\n          groups.thisYear = [...(groups.thisYear || []), thread];\n        } else {\n          groups.older = [...(groups.older || []), thread];\n        }\n\n        return groups;\n      },\n      {\n        today: [] as Thread[],\n        yesterday: [] as Thread[],\n        last7Days: [] as Thread[],\n        last30Days: [] as Thread[],\n        thisYear: [] as Thread[],\n        older: [] as Thread[],\n      },\n    );\n  };\n\n  const groupedThreads = groupThreads();\n  const groupLabels: { [key in keyof typeof groupedThreads]: string } = {\n    today: \"Today\",\n    yesterday: \"Yesterday\",\n    last7Days: \"Previous 7 Days\",\n    last30Days: \"Previous 30 Days\",\n    thisYear: \"This Year\",\n    older: \"Older\",\n  };\n\n  return (\n    <div className={clsx(\"openui-shell-thread-list\", className)}>\n      {Object.entries(groupedThreads)\n        .filter(([_, groupThreads]) => groupThreads.length > 0)\n        .map(([group, groupThreads]) => (\n          <Fragment key={group}>\n            <div className=\"openui-shell-thread-list-group\">\n              {groupLabels[group as keyof typeof groupLabels]}\n            </div>\n            {groupThreads.map((thread) => (\n              <ThreadButton key={thread.id} id={thread.id} title={thread.title} />\n            ))}\n          </Fragment>\n        ))}\n    </div>\n  );\n};\n","import { useThread } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { ReactNode } from \"react\";\nimport { ConversationStarterProps } from \"../../types/ConversationStarter\";\nimport { isChatEmpty } from \"../_shared/utils\";\nimport { DesktopWelcomeComposer } from \"./components\";\nimport { ConversationStarter, ConversationStarterVariant } from \"./ConversationStarter\";\n\ninterface WelcomeScreenBaseProps {\n  /**\n   * Additional CSS class name\n   */\n  className?: string;\n}\n\ninterface WelcomeScreenWithContentProps extends WelcomeScreenBaseProps {\n  /**\n   * The greeting/title text to display\n   */\n  title?: string;\n  /**\n   * Optional description text to add more context\n   */\n  description?: string;\n  /**\n   * Image to display - can be a URL object or a ReactNode\n   * - { url: string }: Renders an <img> tag with default styling (64x64, object-fit: cover, rounded)\n   * - ReactNode: Renders the provided element directly (for custom icons, styled images, etc.)\n   */\n  image?: { url: string } | ReactNode;\n  /**\n   * Conversation starters to show below the composer\n   */\n  starters?: ConversationStarterProps[];\n  /**\n   * Variant of the conversation starters\n   */\n  starterVariant?: ConversationStarterVariant;\n  /**\n   * Children are not allowed when using props-based content\n   */\n  children?: never;\n}\n\ninterface WelcomeScreenWithChildrenProps extends WelcomeScreenBaseProps {\n  /**\n   * Custom content to render inside the welcome screen\n   * When children are provided, title, description, and image are ignored\n   */\n  children: ReactNode;\n  title?: never;\n  description?: never;\n  image?: never;\n  starters?: never;\n  starterVariant?: never;\n}\n\nexport type WelcomeScreenProps = WelcomeScreenWithContentProps | WelcomeScreenWithChildrenProps;\n\n/**\n * Type guard to check if image is a URL object\n */\nconst isImageUrl = (image: { url: string } | ReactNode): image is { url: string } => {\n  return typeof image === \"object\" && image !== null && \"url\" in image;\n};\n\nexport const WelcomeScreen = (props: WelcomeScreenProps) => {\n  const { className, starters = [], starterVariant = \"long\" } = props;\n\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  // Only show when there are no messages\n  if (!isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  // Check if children are provided\n  if (\"children\" in props && props.children) {\n    return <div className={clsx(\"openui-shell-welcome-screen\", className)}>{props.children}</div>;\n  }\n\n  // Props-based content\n  const { title, description, image } = props as WelcomeScreenWithContentProps;\n\n  const renderImage = () => {\n    if (!image) return null;\n\n    if (isImageUrl(image)) {\n      return (\n        <img src={image.url} alt={title || \"\"} className=\"openui-shell-welcome-screen__image\" />\n      );\n    }\n\n    return image;\n  };\n\n  return (\n    <div\n      className={clsx(\n        \"openui-shell-welcome-screen\",\n        \"openui-shell-welcome-screen--with-composer\",\n        className,\n      )}\n    >\n      <div className=\"openui-shell-welcome-screen__header\">\n        {image && (\n          <div className=\"openui-shell-welcome-screen__image-container\">{renderImage()}</div>\n        )}\n        {(title || description) && (\n          <div className=\"openui-shell-welcome-screen__content\">\n            {title && <h2 className=\"openui-shell-welcome-screen__title\">{title}</h2>}\n            {description && (\n              <p className=\"openui-shell-welcome-screen__description\">{description}</p>\n            )}\n          </div>\n        )}\n      </div>\n      {/* Desktop-only welcome composer */}\n      <div className=\"openui-shell-welcome-screen__composer-starters-container\">\n        <div className=\"openui-shell-welcome-screen__desktop-composer\">\n          <DesktopWelcomeComposer />\n        </div>\n        {/* Desktop-only conversation starters */}\n        {starters.length > 0 && (\n          <div className=\"openui-shell-welcome-screen__desktop-starters\">\n            <ConversationStarter starters={starters} variant={starterVariant} />\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default WelcomeScreen;\n","export * from \"../_shared/artifact\";\nexport * from \"../_shared/store\";\nexport * from \"./components\";\nexport * from \"./Container\";\nexport * from \"./ConversationStarter\";\nexport * from \"./MobileHeader\";\nexport * from \"./NewChatButton\";\nexport * from \"./Sidebar\";\nexport * from \"./Thread\";\nexport * from \"./ThreadList\";\nexport * from \"./WelcomeScreen\";\n","\"use client\";\n\nimport type { AssistantMessage, ToolMessage } from \"@openuidev/react-headless\";\nimport { useThread } from \"@openuidev/react-headless\";\nimport type { ActionEvent, Library } from \"@openuidev/react-lang\";\nimport { BuiltinActionType, Renderer } from \"@openuidev/react-lang\";\nimport { useCallback, useMemo } from \"react\";\nimport { separateContentAndContext, wrapContent, wrapContext } from \"../../utils/contentParser\";\nimport { AssistantMessageContainer } from \"../Shell\";\nimport { BehindTheScenes, ToolCallComponent } from \"../ToolCall\";\nimport { ToolResult } from \"../ToolResult\";\n\nexport const GenUIAssistantMessage = ({\n  message,\n  library,\n}: {\n  message: AssistantMessage;\n  library: Library;\n}) => {\n  const messages = useThread((s) => s.messages);\n  const isRunning = useThread((s) => s.isRunning);\n  const processMessage = useThread((s) => s.processMessage);\n  const updateMessage = useThread((s) => s.updateMessage);\n\n  const isStreaming = useMemo(() => {\n    if (!isRunning) return false;\n    for (let i = messages.length - 1; i >= 0; i--) {\n      if (messages[i]?.role === \"assistant\") {\n        return messages[i]?.id === message.id;\n      }\n    }\n    return false;\n  }, [isRunning, messages, message.id]);\n\n  // Separate openui-lang code from persisted form state\n  const { content: openuiCode, contextString } = useMemo(() => {\n    if (!message.content) return { content: null, contextString: null };\n    return separateContentAndContext(message.content);\n  }, [message.content]);\n\n  const initialState = useMemo(() => {\n    if (!contextString) return undefined;\n    try {\n      const parsed = JSON.parse(contextString);\n      if (Array.isArray(parsed) && typeof parsed[0] === \"object\") return parsed[0];\n      if (typeof parsed === \"object\" && !Array.isArray(parsed)) return parsed;\n      return undefined;\n    } catch {\n      return undefined;\n    }\n  }, [contextString]);\n\n  const toolMessages = useMemo(() => {\n    const result: ToolMessage[] = [];\n    const msgIndex = messages.findIndex((m) => m.id === message.id);\n    if (msgIndex !== -1) {\n      for (let i = msgIndex + 1; i < messages.length; i++) {\n        const m = messages[i];\n        if (m && m.role === \"tool\") {\n          result.push(m as ToolMessage);\n        } else {\n          break;\n        }\n      }\n    }\n    return result;\n  }, [messages, message.id]);\n\n  const getToolName = (toolCallId: string) => {\n    const toolCall = message.toolCalls?.find((tc) => tc.id === toolCallId);\n    return toolCall?.function.name;\n  };\n\n  // Persist form state into the message content (XML-wrapped)\n  const handleStateUpdate = useCallback(\n    (state: Record<string, any>) => {\n      const code = openuiCode ?? \"\";\n      const contextJson = JSON.stringify([state]);\n      const fullMessage = code + \"\\n\" + wrapContext(contextJson);\n      updateMessage({ ...message, content: fullMessage });\n    },\n    [updateMessage, message, openuiCode],\n  );\n\n  // Build LLM-friendly message from action + form state, then dispatch\n  const handleAction = useCallback(\n    (event: ActionEvent) => {\n      if (event.type === BuiltinActionType.ContinueConversation) {\n        const contentPart = event.humanFriendlyMessage\n          ? wrapContent(event.humanFriendlyMessage)\n          : \"\";\n        const messageCtx: (string | object)[] = [`User clicked: ${event.humanFriendlyMessage}`];\n        if (event.formState) {\n          messageCtx.push(event.formState);\n        }\n        const contextPart = wrapContext(JSON.stringify(messageCtx));\n        const llmMessage = `${contentPart}${contextPart}`;\n\n        processMessage({\n          role: \"user\",\n          content: llmMessage,\n        });\n      } else if (event.type === BuiltinActionType.OpenUrl) {\n        const url = event.params?.[\"url\"] as string | undefined;\n        if (typeof window !== \"undefined\" && url) {\n          window.open(url, \"_blank\");\n        }\n      }\n    },\n    [processMessage],\n  );\n\n  const hasToolActivity =\n    (message.toolCalls && message.toolCalls.length > 0) || toolMessages.length > 0;\n\n  return (\n    <AssistantMessageContainer>\n      {hasToolActivity && (\n        <BehindTheScenes isStreaming={isStreaming} toolCallsComplete={!!message.content}>\n          {message.toolCalls?.map((toolCall, idx) => (\n            <ToolCallComponent\n              key={toolCall.id}\n              toolCall={toolCall}\n              isStreaming={isStreaming}\n              toolsDone={!!message.content}\n              isLast={idx === (message.toolCalls?.length ?? 0) - 1 && toolMessages.length === 0}\n            />\n          ))}\n          {toolMessages.map((tm) => (\n            <ToolResult key={tm.id} message={tm} toolName={getToolName(tm.toolCallId)} />\n          ))}\n        </BehindTheScenes>\n      )}\n      <Renderer\n        response={openuiCode}\n        library={library}\n        isStreaming={isStreaming}\n        onAction={handleAction}\n        onStateUpdate={handleStateUpdate}\n        initialState={initialState}\n      />\n    </AssistantMessageContainer>\n  );\n};\n","\"use client\";\n\nimport type { UserMessage } from \"@openuidev/react-headless\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { separateContentAndContext } from \"../../utils/contentParser\";\n\n/**\n * Extracts the first plain object from a context string.\n * The triggerAction context format is: [\"action description string\", { formState }]\n */\nfunction parseContextForDisplay(contextString: string | null): Record<string, any> {\n  if (!contextString) return {};\n  try {\n    const parsed = JSON.parse(contextString);\n    if (Array.isArray(parsed)) {\n      const stateObj = parsed.find(\n        (item) => item !== null && typeof item === \"object\" && !Array.isArray(item),\n      );\n      return stateObj ?? {};\n    }\n    if (typeof parsed === \"object\" && parsed !== null) {\n      return parsed;\n    }\n    return {};\n  } catch {\n    return {};\n  }\n}\n\nfunction getEntries(state: Record<string, any>): { label: string; value: string }[] {\n  // Detect nested (form-named) shape\n  const isNested = Object.values(state).some(\n    (v) =>\n      v !== null &&\n      typeof v === \"object\" &&\n      !(\"value\" in v) &&\n      Object.values(v).some((f) => f !== null && typeof f === \"object\" && \"value\" in f),\n  );\n\n  const entries: { label: string; value: string }[] = [];\n\n  if (isNested) {\n    for (const [, fields] of Object.entries(state)) {\n      if (typeof fields !== \"object\" || fields === null) continue;\n      for (const [fieldName, field] of Object.entries(fields as Record<string, any>)) {\n        if (field && typeof field === \"object\" && \"value\" in field) {\n          const val = field.value;\n          if (val !== undefined && val !== null && val !== \"\") {\n            entries.push({ label: fieldName, value: String(val) });\n          }\n        }\n      }\n    }\n  } else {\n    for (const [fieldName, field] of Object.entries(state)) {\n      if (field && typeof field === \"object\" && \"value\" in field) {\n        const val = field.value;\n        if (val !== undefined && val !== null && val !== \"\") {\n          entries.push({ label: fieldName, value: String(val) });\n        }\n      }\n    }\n  }\n\n  return entries;\n}\n\nfunction FormDataAccordion({ state }: { state: Record<string, any> }) {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const entries = getEntries(state);\n\n  if (entries.length === 0) return null;\n\n  return (\n    <div className=\"openui-genui-user-message__form-state\">\n      <button\n        className=\"openui-genui-user-message__form-state-header\"\n        onClick={() => setIsExpanded((v) => !v)}\n        type=\"button\"\n      >\n        <span className=\"openui-genui-user-message__form-state-label\">\n          Form data ({entries.length} {entries.length === 1 ? \"field\" : \"fields\"})\n        </span>\n        <ChevronDown\n          size={14}\n          className={`openui-genui-user-message__form-state-chevron${isExpanded ? \" openui-genui-user-message__form-state-chevron--expanded\" : \"\"}`}\n        />\n      </button>\n      {isExpanded && (\n        <div className=\"openui-genui-user-message__form-state-content\">\n          {entries.map(({ label, value }) => (\n            <div key={label} className=\"openui-genui-user-message__form-field\">\n              <span className=\"openui-genui-user-message__form-field-label\">{label}:</span>\n              <span className=\"openui-genui-user-message__form-field-value\">{value}</span>\n            </div>\n          ))}\n        </div>\n      )}\n    </div>\n  );\n}\n\n/**\n * Renders a user message, handling both plain text messages and\n * XML-formatted messages from form submissions (which contain <content> and <context> tags).\n */\nexport const GenUIUserMessage = ({ message }: { message: UserMessage }) => {\n  const rawContent = typeof message.content === \"string\" ? message.content : \"\";\n  const { content: humanText, contextString } = separateContentAndContext(rawContent);\n  const formState = parseContextForDisplay(contextString);\n  const hasFormData = Object.keys(formState).length > 0;\n\n  return (\n    <div className=\"openui-shell-thread-message-user\">\n      <div className=\"openui-genui-user-message\">\n        {hasFormData && <FormDataAccordion state={formState} />}\n        <div className=\"openui-shell-thread-message-user__content\">\n          {humanText && <div>{humanText}</div>}\n        </div>\n      </div>\n    </div>\n  );\n};\n","import type { AssistantMessage, ChatProviderProps, UserMessage } from \"@openuidev/react-headless\";\nimport { ChatProvider } from \"@openuidev/react-headless\";\nimport type { Library } from \"@openuidev/react-lang\";\nimport { useMemo } from \"react\";\nimport { ThemeProps, ThemeProvider } from \"../ThemeProvider\";\nimport { GenUIAssistantMessage } from \"./GenUIAssistantMessage\";\nimport { GenUIUserMessage } from \"./GenUIUserMessage\";\nimport type { SharedChatUIProps } from \"./types\";\n\ntype ThemeWrapperProps = {\n  theme?: ThemeProps;\n  disableThemeProvider?: boolean;\n};\n\nexport type ChatLayoutProps<Extra = {}> = Omit<ChatProviderProps, \"children\"> &\n  SharedChatUIProps &\n  ThemeWrapperProps &\n  Extra;\n\nconst DummyThemeProvider = ({ children }: { children: React.ReactNode }) => {\n  return children;\n};\n\nconst CHAT_PROVIDER_PROP_KEYS: Set<keyof Omit<ChatProviderProps, \"children\">> = new Set([\n  \"apiUrl\",\n  \"processMessage\",\n  \"threadApiUrl\",\n  \"fetchThreadList\",\n  \"createThread\",\n  \"deleteThread\",\n  \"updateThread\",\n  \"loadThread\",\n  \"streamProtocol\",\n  \"messageFormat\",\n]);\n\nexport function withChatProvider<ExtraProps = {}>(WrappedComponent: React.ComponentType<any>) {\n  const WithChatProvider = (props: ChatLayoutProps<ExtraProps>) => {\n    const innerProps: Record<string, unknown> = {};\n    const chatProviderProps: Record<string, unknown> = {};\n    let theme: ThemeProps | undefined;\n    let disableThemeProvider = false;\n\n    for (const [key, value] of Object.entries(props)) {\n      if (key === \"theme\") {\n        theme = value as ThemeProps;\n      } else if (key === \"disableThemeProvider\") {\n        disableThemeProvider = value as boolean;\n      } else if (CHAT_PROVIDER_PROP_KEYS.has(key as keyof Omit<ChatProviderProps, \"children\">)) {\n        chatProviderProps[key] = value;\n      } else {\n        innerProps[key] = value;\n      }\n    }\n\n    const componentLibrary = innerProps[\"componentLibrary\"] as Library | undefined;\n    const customAssistantMessage = innerProps[\"assistantMessage\"];\n    const customUserMessage = innerProps[\"userMessage\"];\n\n    const genUIAssistantMessage = useMemo(() => {\n      if (customAssistantMessage || !componentLibrary) return undefined;\n      return ({ message }: { message: AssistantMessage }) => (\n        <GenUIAssistantMessage message={message} library={componentLibrary} />\n      );\n    }, [customAssistantMessage, componentLibrary]);\n\n    const genUIUserMessage = useMemo(() => {\n      if (customUserMessage || !componentLibrary) return undefined;\n      return ({ message }: { message: UserMessage }) => <GenUIUserMessage message={message} />;\n    }, [customUserMessage, componentLibrary]);\n\n    if (genUIAssistantMessage && !customAssistantMessage) {\n      innerProps[\"assistantMessage\"] = genUIAssistantMessage;\n    }\n    if (genUIUserMessage && !customUserMessage) {\n      innerProps[\"userMessage\"] = genUIUserMessage;\n    }\n\n    const ThemeProviderComponent = disableThemeProvider ? DummyThemeProvider : ThemeProvider;\n\n    return (\n      <ThemeProviderComponent {...theme}>\n        <ChatProvider {...(chatProviderProps as any)}>\n          <WrappedComponent {...innerProps} />\n        </ChatProvider>\n      </ThemeProviderComponent>\n    );\n  };\n\n  WithChatProvider.displayName = `withChatProvider(${WrappedComponent.displayName || WrappedComponent.name || \"Component\"})`;\n\n  return WithChatProvider;\n}\n","import { useThread } from \"@openuidev/react-headless\";\nimport { useState } from \"react\";\nimport {\n  Container,\n  ConversationStarter,\n  Composer as DefaultComposer,\n  Header,\n  MessageLoading,\n  Messages,\n  ScrollArea,\n  ThreadContainer,\n  Trigger,\n  WelcomeScreen,\n} from \"../BottomTray\";\nimport { CustomComposerAdapter } from \"./CustomComposerAdapter\";\nimport { ShareThread } from \"./ShareThread\";\nimport type { SharedChatUIProps } from \"./types\";\nimport { isChatEmpty, isWelcomeComponent } from \"./utils\";\nimport { withChatProvider } from \"./withChatProvider\";\n\ninterface BottomTraySpecificProps extends SharedChatUIProps {\n  isOpen?: boolean;\n  onOpenChange?: (isOpen: boolean) => void;\n  defaultOpen?: boolean;\n  headerActions?: React.ReactNode;\n}\n\nconst WelcomeMessageRenderer = ({ welcomeMessage }: Pick<SharedChatUIProps, \"welcomeMessage\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!welcomeMessage || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  if (isWelcomeComponent(welcomeMessage)) {\n    const CustomWelcome = welcomeMessage;\n    return (\n      <WelcomeScreen>\n        <CustomWelcome />\n      </WelcomeScreen>\n    );\n  }\n\n  return (\n    <WelcomeScreen\n      title={welcomeMessage.title}\n      description={welcomeMessage.description}\n      image={welcomeMessage.image}\n    />\n  );\n};\n\nconst ConversationStartersRenderer = ({\n  conversationStarters,\n}: Pick<SharedChatUIProps, \"conversationStarters\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!conversationStarters || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  return (\n    <ConversationStarter\n      variant={conversationStarters.variant}\n      starters={conversationStarters.options}\n    />\n  );\n};\n\nconst BottomTrayInner = ({\n  logoUrl = \"https://www.openui.com/favicon.svg\",\n  agentName = \"My Agent\",\n  showAssistantLogo = false,\n  messageLoading: MessageLoadingComponent = MessageLoading,\n  scrollVariant = \"user-message-anchor\",\n  isOpen: controlledIsOpen,\n  onOpenChange,\n  defaultOpen = false,\n  welcomeMessage,\n  conversationStarters,\n  assistantMessage,\n  userMessage,\n  composer: ComposerComponent,\n  headerActions,\n  generateShareLink,\n}: BottomTraySpecificProps) => {\n  const [uncontrolledIsOpen, setUncontrolledIsOpen] = useState(defaultOpen);\n\n  const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : uncontrolledIsOpen;\n\n  const handleOpenChange = (newIsOpen: boolean) => {\n    if (controlledIsOpen === undefined) {\n      setUncontrolledIsOpen(newIsOpen);\n    }\n    onOpenChange?.(newIsOpen);\n  };\n\n  const shareButton = generateShareLink ? (\n    <ShareThread generateShareLink={generateShareLink} />\n  ) : null;\n\n  return (\n    <>\n      <Trigger onClick={() => handleOpenChange(!isOpen)} isOpen={isOpen}>\n        {logoUrl ? (\n          <img src={logoUrl} alt=\"Logo\" className=\"openui-bottom-tray-trigger-logo\" />\n        ) : null}\n      </Trigger>\n\n      <Container\n        logoUrl={logoUrl}\n        agentName={agentName}\n        showAssistantLogo={showAssistantLogo}\n        isOpen={isOpen}\n      >\n        <ThreadContainer>\n          <Header\n            onMinimize={() => handleOpenChange(false)}\n            rightChildren={\n              <>\n                {shareButton}\n                {headerActions}\n              </>\n            }\n          />\n          <WelcomeMessageRenderer welcomeMessage={welcomeMessage} />\n          <ScrollArea scrollVariant={scrollVariant}>\n            <Messages\n              loader={<MessageLoadingComponent />}\n              assistantMessage={assistantMessage}\n              userMessage={userMessage}\n            />\n          </ScrollArea>\n          <ConversationStartersRenderer conversationStarters={conversationStarters} />\n          {ComposerComponent ? (\n            <CustomComposerAdapter composer={ComposerComponent} />\n          ) : (\n            <DefaultComposer />\n          )}\n        </ThreadContainer>\n      </Container>\n    </>\n  );\n};\n\nexport const BottomTray = withChatProvider<{\n  isOpen?: boolean;\n  onOpenChange?: (isOpen: boolean) => void;\n  defaultOpen?: boolean;\n  headerActions?: React.ReactNode;\n}>(BottomTrayInner);\n","import { useThread } from \"@openuidev/react-headless\";\nimport {\n  Container,\n  ConversationStarter,\n  Composer as DefaultComposer,\n  Header,\n  MessageLoading,\n  Messages,\n  ScrollArea,\n  ThreadContainer,\n  WelcomeScreen,\n} from \"../CopilotShell\";\nimport { CustomComposerAdapter } from \"./CustomComposerAdapter\";\nimport { ShareThread } from \"./ShareThread\";\nimport type { SharedChatUIProps } from \"./types\";\nimport { isChatEmpty, isWelcomeComponent } from \"./utils\";\nimport { withChatProvider } from \"./withChatProvider\";\n\nconst WelcomeMessageRenderer = ({ welcomeMessage }: Pick<SharedChatUIProps, \"welcomeMessage\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!welcomeMessage || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  if (isWelcomeComponent(welcomeMessage)) {\n    const CustomWelcome = welcomeMessage;\n    return (\n      <WelcomeScreen>\n        <CustomWelcome />\n      </WelcomeScreen>\n    );\n  }\n\n  return (\n    <WelcomeScreen\n      title={welcomeMessage.title}\n      description={welcomeMessage.description}\n      image={welcomeMessage.image}\n    />\n  );\n};\n\nconst ConversationStartersRenderer = ({\n  conversationStarters,\n}: Pick<SharedChatUIProps, \"conversationStarters\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!conversationStarters || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  return (\n    <ConversationStarter\n      variant={conversationStarters.variant}\n      starters={conversationStarters.options}\n    />\n  );\n};\n\ninterface CopilotSpecificProps extends SharedChatUIProps {\n  headerActions?: React.ReactNode;\n}\n\nconst CopilotInner = ({\n  logoUrl = \"https://www.openui.com/favicon.svg\",\n  agentName = \"My Agent\",\n  showAssistantLogo = false,\n  messageLoading: MessageLoadingComponent = MessageLoading,\n  scrollVariant = \"user-message-anchor\",\n  welcomeMessage,\n  conversationStarters,\n  assistantMessage,\n  userMessage,\n  composer: ComposerComponent,\n  headerActions,\n  generateShareLink,\n}: CopilotSpecificProps) => {\n  const shareButton = generateShareLink ? (\n    <ShareThread generateShareLink={generateShareLink} />\n  ) : null;\n\n  return (\n    <Container logoUrl={logoUrl} agentName={agentName} showAssistantLogo={showAssistantLogo}>\n      <ThreadContainer>\n        <Header\n          rightChildren={\n            <>\n              {shareButton}\n              {headerActions}\n            </>\n          }\n        />\n        <WelcomeMessageRenderer welcomeMessage={welcomeMessage} />\n        <ScrollArea scrollVariant={scrollVariant}>\n          <Messages\n            loader={<MessageLoadingComponent />}\n            assistantMessage={assistantMessage}\n            userMessage={userMessage}\n          />\n        </ScrollArea>\n        <ConversationStartersRenderer conversationStarters={conversationStarters} />\n        {ComposerComponent ? (\n          <CustomComposerAdapter composer={ComposerComponent} />\n        ) : (\n          <DefaultComposer />\n        )}\n      </ThreadContainer>\n    </Container>\n  );\n};\n\nexport const Copilot = withChatProvider<{\n  headerActions?: React.ReactNode;\n}>(CopilotInner);\n","import { useThread } from \"@openuidev/react-headless\";\nimport {\n  Container,\n  ConversationStarter,\n  Composer as DefaultComposer,\n  MessageLoading,\n  Messages,\n  MobileHeader,\n  NewChatButton,\n  ScrollArea,\n  SidebarContainer,\n  SidebarContent,\n  SidebarHeader,\n  SidebarSeparator,\n  ThreadContainer,\n  ThreadHeader,\n  ThreadList,\n  WelcomeScreen,\n} from \"../Shell\";\nimport { CustomComposerAdapter } from \"./CustomComposerAdapter\";\nimport { ShareThread } from \"./ShareThread\";\nimport type { SharedChatUIProps } from \"./types\";\nimport { isChatEmpty, isWelcomeComponent } from \"./utils\";\nimport { withChatProvider } from \"./withChatProvider\";\n\nconst WelcomeMessageRenderer = ({\n  welcomeMessage,\n  conversationStarters,\n}: Pick<SharedChatUIProps, \"welcomeMessage\" | \"conversationStarters\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!welcomeMessage || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  if (isWelcomeComponent(welcomeMessage)) {\n    const CustomWelcome = welcomeMessage;\n    return (\n      <WelcomeScreen>\n        <CustomWelcome />\n      </WelcomeScreen>\n    );\n  }\n\n  return (\n    <WelcomeScreen\n      title={welcomeMessage.title}\n      description={welcomeMessage.description}\n      image={welcomeMessage.image}\n      starters={conversationStarters?.options}\n      starterVariant={conversationStarters?.variant}\n    />\n  );\n};\n\nconst ConversationStartersRenderer = ({\n  conversationStarters,\n}: Pick<SharedChatUIProps, \"conversationStarters\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!conversationStarters || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  return (\n    <ConversationStarter\n      variant={conversationStarters.variant}\n      starters={conversationStarters.options}\n    />\n  );\n};\n\ninterface FullScreenSpecificProps extends SharedChatUIProps {\n  threadHeader?: React.ReactNode;\n  mobileHeaderActions?: React.ReactNode;\n}\n\nconst FullScreenInner = ({\n  logoUrl = \"https://www.openui.com/favicon.svg\",\n  agentName = \"My Agent\",\n  showAssistantLogo = false,\n  messageLoading: MessageLoadingComponent = MessageLoading,\n  scrollVariant = \"user-message-anchor\",\n  welcomeMessage,\n  conversationStarters,\n  assistantMessage,\n  userMessage,\n  composer: ComposerComponent,\n  threadHeader,\n  mobileHeaderActions,\n  generateShareLink,\n}: FullScreenSpecificProps) => {\n  const shareButton = generateShareLink ? (\n    <ShareThread generateShareLink={generateShareLink} />\n  ) : null;\n\n  return (\n    <Container logoUrl={logoUrl} agentName={agentName} showAssistantLogo={showAssistantLogo}>\n      <SidebarContainer>\n        <SidebarHeader />\n        <SidebarContent>\n          <NewChatButton />\n          <SidebarSeparator />\n          <ThreadList />\n        </SidebarContent>\n      </SidebarContainer>\n      <ThreadContainer>\n        <MobileHeader\n          rightChildren={\n            <>\n              {shareButton}\n              {mobileHeaderActions}\n            </>\n          }\n        />\n        {(threadHeader || shareButton) && (\n          <ThreadHeader>\n            {threadHeader}\n            {shareButton}\n          </ThreadHeader>\n        )}\n        <WelcomeMessageRenderer\n          welcomeMessage={welcomeMessage}\n          conversationStarters={conversationStarters}\n        />\n        <ScrollArea scrollVariant={scrollVariant}>\n          <Messages\n            loader={<MessageLoadingComponent />}\n            assistantMessage={assistantMessage}\n            userMessage={userMessage}\n          />\n        </ScrollArea>\n        <ConversationStartersRenderer conversationStarters={conversationStarters} />\n        {ComposerComponent ? (\n          <CustomComposerAdapter composer={ComposerComponent} />\n        ) : (\n          <DefaultComposer />\n        )}\n      </ThreadContainer>\n    </Container>\n  );\n};\n\nexport const FullScreen = withChatProvider<{\n  threadHeader?: React.ReactNode;\n  mobileHeaderActions?: React.ReactNode;\n}>(FullScreenInner);\n","import * as Radio from \"@radix-ui/react-radio-group\";\nimport clsx from \"clsx\";\nimport { CSSProperties, forwardRef, ReactElement } from \"react\";\nimport { RadioItemProps } from \"../RadioItem\";\n\ntype RadioGroupVariant = \"clear\" | \"card\" | \"sunk\";\ninterface RadioGroupProps extends Radio.RadioGroupProps {\n  children: ReactElement<RadioItemProps> | ReactElement<RadioItemProps>[];\n  variant?: RadioGroupVariant;\n  className?: string;\n  style?: CSSProperties;\n}\n\nconst variants: Record<RadioGroupVariant, string> = {\n  clear: \"openui-radio-group-clear\",\n  card: \"openui-radio-group-card\",\n  sunk: \"openui-radio-group-sunk\",\n};\n\nconst RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>((props, ref) => {\n  const { children, className, style, variant = \"clear\", ...rest } = props;\n  return (\n    <Radio.Root\n      ref={ref}\n      className={clsx(\"openui-radio-group\", variants[variant], className)}\n      style={style}\n      {...rest}\n    >\n      {children}\n    </Radio.Root>\n  );\n});\n\nRadioGroup.displayName = \"RadioGroup\";\n\nexport { RadioGroup, type RadioGroupProps };\n","import * as Radio from \"@radix-ui/react-radio-group\";\nimport clsx from \"clsx\";\nimport { CSSProperties, forwardRef, ReactNode, useId } from \"react\";\n\nexport interface RadioItemProps {\n  label?: ReactNode;\n  description?: ReactNode;\n  className?: string;\n  style?: CSSProperties;\n  disabled?: boolean;\n  required?: boolean;\n  value: string;\n}\n\nconst RadioItem = forwardRef<HTMLButtonElement, RadioItemProps>((props, ref) => {\n  const { label, description, className, style, disabled, required, value } = props;\n  const id = useId();\n  return (\n    <label htmlFor={id} className=\"openui-radio-item-container\">\n      <Radio.Item\n        ref={ref}\n        id={id}\n        className={clsx(\"openui-radio-item-root\", className)}\n        value={value}\n        disabled={disabled}\n        required={required}\n        style={style}\n      >\n        <svg\n          width={16}\n          height={16}\n          fill=\"none\"\n          viewBox=\"0 0 16 16\"\n          className=\"openui-radio-item-svg\"\n        >\n          <path // This is the circle that is filled between the border and the circle\n            fill=\"currentColor\"\n            d=\"M1 8a7 7 0 1 1 14 0A7 7 0 0 1 1 8Z\"\n            className=\"openui-radio-item-svg-path\"\n          />\n          <path // This is the border\n            stroke=\"currentColor\"\n            d=\"M1.5 8a6.5 6.5 0 1 1 13 0 6.5 6.5 0 0 1-13 0Z\"\n            className=\"openui-radio-item-svg-border\"\n          />\n          <path // This is the inner circle\n            fill=\"currentColor\"\n            d=\"M4 8a4 4 0 1 1 8 0 4 4 0 0 1-8 0Z\"\n            className=\"openui-radio-item-svg-inner\"\n          />\n        </svg>\n      </Radio.Item>\n      <div className=\"openui-radio-item-content\">\n        {label && (\n          <label htmlFor={id} className=\"openui-radio-item-label\">\n            {label}\n          </label>\n        )}\n        {description && <p className=\"openui-radio-item-description\">{description}</p>}\n      </div>\n    </label>\n  );\n});\n\nRadioItem.displayName = \"RadioItem\";\n\nexport { RadioItem };\n","import * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport clsx from \"clsx\";\nimport { ChevronRight } from \"lucide-react\";\nimport React, { forwardRef } from \"react\";\nimport { IconButton } from \"../IconButton\";\nimport { Separator } from \"../Separator\";\n\nexport type FoldableSectionRootProps = AccordionPrimitive.AccordionMultipleProps;\n\nexport const FoldableSectionRoot = forwardRef<\n  React.ComponentRef<typeof AccordionPrimitive.Root>,\n  FoldableSectionRootProps\n>(({ className, style, ...props }, ref) => (\n  <AccordionPrimitive.Root\n    ref={ref}\n    className={clsx(\"openui-foldable-section-root\", className)}\n    style={style}\n    {...props}\n  />\n));\nFoldableSectionRoot.displayName = \"FoldableSectionRoot\";\n\nexport interface FoldableSectionItemProps\n  extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item> {\n  className?: string;\n  style?: React.CSSProperties;\n  value: string;\n}\n\nexport const FoldableSectionItem = forwardRef<\n  React.ComponentRef<typeof AccordionPrimitive.Item>,\n  FoldableSectionItemProps\n>(({ className, style, value, ...props }, ref) => (\n  <AccordionPrimitive.Item\n    ref={ref}\n    className={clsx(\"openui-foldable-section-item\", className)}\n    style={style}\n    value={value}\n    {...props}\n  />\n));\nFoldableSectionItem.displayName = \"FoldableSectionItem\";\n\nexport interface FoldableSectionTriggerProps\n  extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> {\n  className?: string;\n  style?: React.CSSProperties;\n  text: React.ReactNode;\n}\n\nexport const FoldableSectionTrigger = forwardRef<\n  React.ComponentRef<typeof AccordionPrimitive.Trigger>,\n  FoldableSectionTriggerProps\n>(({ className, style, text, ...props }, ref) => (\n  <AccordionPrimitive.Header className=\"openui-foldable-section-header\">\n    <AccordionPrimitive.Trigger\n      ref={ref}\n      className={clsx(\"openui-foldable-section-trigger\", className)}\n      style={style}\n      {...props}\n    >\n      <div className=\"openui-foldable-section-trigger-content-wrapper\">\n        <Separator className=\"openui-foldable-section-trigger-content-separator\" />\n        <div className=\"openui-foldable-section-trigger-content-icon-button-wrapper\">\n          <IconButton\n            icon={\n              <ChevronRight className=\"openui-foldable-section-trigger-content-icon-button-icon\" />\n            }\n            size=\"3-extra-small\"\n            variant=\"secondary\"\n            className=\"openui-foldable-section-trigger-content-icon-button\"\n          />\n          <div className=\"openui-foldable-section-trigger-content-text\">{text}</div>\n        </div>\n      </div>\n    </AccordionPrimitive.Trigger>\n  </AccordionPrimitive.Header>\n));\nFoldableSectionTrigger.displayName = \"FoldableSectionTrigger\";\n\nexport interface FoldableSectionContentProps\n  extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content> {\n  className?: string;\n  style?: React.CSSProperties;\n  children?: React.ReactNode;\n}\n\nexport const FoldableSectionContent = forwardRef<\n  React.ComponentRef<typeof AccordionPrimitive.Content>,\n  FoldableSectionContentProps\n>(({ className, style, children, ...props }, ref) => (\n  <AccordionPrimitive.Content\n    ref={ref}\n    className={clsx(\"openui-foldable-section-content\", className)}\n    style={style}\n    {...props}\n  >\n    {children}\n  </AccordionPrimitive.Content>\n));\nFoldableSectionContent.displayName = \"FoldableSectionContent\";\n","import React from \"react\";\nimport { Separator } from \"../Separator\";\n\ninterface SectionV2Props {\n  trigger: string;\n  children?: React.ReactNode;\n}\n\nexport const SectionV2 = ({ trigger, children }: SectionV2Props) => {\n  return (\n    <div className=\"openui-section-v2\">\n      <div className=\"openui-section-v2-wrapper\">\n        <Separator orientation=\"horizontal\" />\n        <div className=\"openui-section-v2-header\">\n          <div className=\"openui-section-v2-header-trigger\">{trigger}</div>\n        </div>\n        <div className=\"openui-section-v2-content\">{children}</div>\n      </div>\n    </div>\n  );\n};\n","import clsx from \"clsx\";\n\ninterface SkeletonBarProps {\n  height: string;\n  width: string;\n  borderRadius?: string;\n}\n\nfunction SkeletonBar({ height, width, borderRadius }: SkeletonBarProps) {\n  return (\n    <div\n      className=\"openui-skeleton-bar\"\n      style={{\n        height,\n        width,\n        ...(borderRadius ? { borderRadius } : {}),\n      }}\n    />\n  );\n}\n\nexport function Skeleton({\n  count = 1,\n  height = \"16px\",\n  width = \"100%\",\n  borderRadius,\n  className,\n}: {\n  count?: number;\n  height?: string;\n  width?: string;\n  borderRadius?: string;\n  className?: string;\n}) {\n  return (\n    <div className={clsx(\"openui-skeleton-stack\", className)}>\n      {Array.from({ length: count }, (_, i) => (\n        <SkeletonBar key={i} height={height} width={width} borderRadius={borderRadius} />\n      ))}\n    </div>\n  );\n}\n\nexport function PieChartSkeleton({\n  size = 200,\n  legendItems = 4,\n  variant = \"pie\",\n  appearance = \"circular\",\n}: {\n  size?: number;\n  legendItems?: number;\n  variant?: \"pie\" | \"donut\";\n  appearance?: \"circular\" | \"semiCircular\";\n}) {\n  const isSemi = appearance === \"semiCircular\";\n  const isDonut = variant === \"donut\";\n\n  const chartClass = clsx(\n    \"openui-skeleton-pie-chart-shape\",\n    isSemi && isDonut\n      ? \"openui-skeleton-pie-chart-semi-donut\"\n      : isSemi\n        ? \"openui-skeleton-pie-chart-semi\"\n        : isDonut\n          ? \"openui-skeleton-pie-chart-donut\"\n          : undefined,\n  );\n\n  const chartHeight = isSemi ? size / 2 : size;\n\n  return (\n    <div className=\"openui-skeleton-pie-chart-wrapper\">\n      <div className=\"openui-skeleton-pie-chart-container\">\n        <div className={chartClass} style={{ width: size, height: chartHeight }} />\n      </div>\n      <div className=\"openui-skeleton-pie-chart-legend\">\n        {Array.from({ length: legendItems }, (_, i) => (\n          <div key={i} className=\"openui-skeleton-pie-chart-legend-item\">\n            <div className=\"openui-skeleton-pie-chart-legend-dot\" />\n            <SkeletonBar height=\"12px\" width={`${50 + ((i * 15) % 40)}%`} />\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n}\n\nexport function TableSkeleton({ rows = 5, columns = 4 }: { rows?: number; columns?: number }) {\n  return (\n    <div className=\"openui-skeleton-table\">\n      <div\n        className=\"openui-skeleton-table-row\"\n        style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}\n      >\n        {Array.from({ length: columns }, (_, i) => (\n          <div\n            key={`h-${i}`}\n            className={clsx(\"openui-skeleton-table-cell\", \"openui-skeleton-table-cell-short\")}\n          >\n            <SkeletonBar height=\"14px\" width=\"100%\" />\n          </div>\n        ))}\n      </div>\n      {Array.from({ length: rows }, (_, ri) => (\n        <div\n          key={`r-${ri}`}\n          className=\"openui-skeleton-table-row\"\n          style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}\n        >\n          {Array.from({ length: columns }, (_, ci) => (\n            <div key={`c-${ri}-${ci}`} className=\"openui-skeleton-table-cell\">\n              <SkeletonBar height=\"14px\" width={`${50 + ((ri * 7 + ci * 13) % 40)}%`} />\n            </div>\n          ))}\n        </div>\n      ))}\n    </div>\n  );\n}\n","import * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport clsx from \"clsx\";\nimport { forwardRef, ReactNode, useMemo, useState } from \"react\";\n\nconst formatNumber = (num: number | undefined): string => {\n  if (num === undefined) {\n    return \"\";\n  }\n  // format number to k, m, b\n  if (num >= 1000) {\n    return new Intl.NumberFormat(\"en-US\", {\n      notation: \"compact\",\n      compactDisplay: \"short\",\n    })\n      .format(num)\n      .toLowerCase();\n  }\n  return String(num);\n};\n\nexport interface SliderProps\n  extends Omit<\n    React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n    \"value\" | \"defaultValue\"\n  > {\n  variant: \"continuous\" | \"discrete\";\n  min: number;\n  max: number;\n  step?: number;\n  disabled?: boolean;\n  value?: number[];\n  defaultValue?: number[];\n  className?: string;\n  style?: React.CSSProperties;\n  leftContent?: ReactNode;\n  rightContent?: ReactNode;\n}\n\nexport const Slider = forwardRef<React.ComponentRef<typeof SliderPrimitive.Root>, SliderProps>(\n  (\n    {\n      variant,\n      min,\n      max,\n      step,\n      disabled,\n      value,\n      defaultValue,\n      onValueChange,\n      className,\n      style,\n      leftContent,\n      rightContent,\n      ...props\n    },\n    ref,\n  ) => {\n    // used to show the correct value on thumb\n    const [internalValue, setInternalValue] = useState(\n      defaultValue && defaultValue.length > 0 ? defaultValue : [min],\n    );\n\n    const isControlled = value !== undefined;\n    const valueToShow = isControlled ? value : internalValue;\n\n    const isRange = valueToShow && valueToShow.length > 1;\n\n    const thumbs = useMemo(() => {\n      const thumbClass = \"openui-slider-thumb-handle\";\n      const valueIndicatorClass = \"openui-slider-thumb-value\";\n\n      if (isRange) {\n        return (\n          <>\n            {valueToShow?.map((v, i) => (\n              <SliderPrimitive.Thumb key={i} className=\"openui-slider-thumb\">\n                <div className={thumbClass}>\n                  <div className=\"openui-slider-thumb-handle-inner\">\n                    <div className=\"openui-slider-thumb-handle-inner-dot\" />\n                  </div>\n                  {!disabled && <div className={valueIndicatorClass}>{formatNumber(v)}</div>}\n                </div>\n              </SliderPrimitive.Thumb>\n            ))}\n          </>\n        );\n      }\n\n      return (\n        <SliderPrimitive.Thumb className=\"openui-slider-thumb\">\n          <div className={thumbClass}>\n            <div className=\"openui-slider-thumb-handle-inner\">\n              <div className=\"openui-slider-thumb-handle-inner-dot\" />\n            </div>\n            {!disabled && (\n              <div className={valueIndicatorClass}>{formatNumber(valueToShow?.[0])}</div>\n            )}\n          </div>\n        </SliderPrimitive.Thumb>\n      );\n    }, [disabled, valueToShow, isRange]);\n\n    const renderDots = () => {\n      if (variant === \"discrete\" && step) {\n        const numSteps = Math.floor((max - min) / step);\n        const currentValue = valueToShow?.[0] ?? min;\n\n        return Array.from({ length: numSteps + 1 }, (_, index) => {\n          const value = min + step * index;\n          const position = ((value - min) / (max - min)) * 100;\n          const isActive = isRange\n            ? value >= (valueToShow?.[0] ?? min) && value <= (valueToShow?.[1] ?? max)\n            : value <= currentValue;\n\n          return (\n            <div\n              key={value}\n              className={clsx(\"openui-slider-dots-dot\", {\n                \"openui-slider-dots-dot--active\": isActive,\n              })}\n              style={{ left: `${position}%` }}\n            />\n          );\n        });\n      }\n      return null;\n    };\n\n    return (\n      <div className=\"openui-slider-wrapper\">\n        {leftContent && <div className=\"openui-slider-left-content\">{leftContent}</div>}\n        <div className=\"openui-slider-container-wrapper\">\n          <div className=\"openui-slider-container\">\n            <SliderPrimitive.Root\n              ref={ref}\n              className={clsx(\n                \"openui-slider-root\",\n                { \"openui-slider--disabled\": disabled },\n                className,\n              )}\n              {...props}\n              min={min}\n              max={max}\n              step={step}\n              value={valueToShow}\n              onValueChange={(val) => {\n                if (!isControlled) {\n                  setInternalValue(val);\n                }\n                onValueChange?.(val);\n              }}\n              minStepsBetweenThumbs={1}\n              disabled={disabled}\n              key={variant}\n              style={style}\n            >\n              <SliderPrimitive.Track className=\"openui-slider-track\">\n                <SliderPrimitive.Range\n                  className={clsx(\"openui-slider-range\", {\n                    \"openui-slider-range--at-min\": !isRange && valueToShow?.[0] === min,\n                  })}\n                />\n                {variant === \"discrete\" && renderDots()}\n              </SliderPrimitive.Track>\n              {thumbs}\n            </SliderPrimitive.Root>\n          </div>\n          <div className=\"openui-slider-labels\">\n            <span>{formatNumber(min)}</span>\n            <span>{formatNumber(max)}</span>\n          </div>\n        </div>\n        {rightContent && <div className=\"openui-slider-right-content\">{rightContent}</div>}\n      </div>\n    );\n  },\n);\n","import clsx from \"clsx\";\nimport debounce from \"lodash-es/debounce\";\nimport { AlertCircle } from \"lucide-react\";\nimport { ChangeEvent, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Input } from \"../Input\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../Select\";\nimport { Slider, SliderProps } from \"./Slider\";\n\nexport interface SliderBlockProps extends Omit<SliderProps, \"value\" | \"defaultValue\"> {\n  label: string;\n  defaultValue?: number[];\n}\n\nconst ValueInput = ({\n  value,\n  onChange,\n  error,\n  disabled,\n}: {\n  value: number;\n  onChange: (newValue: number) => void;\n  error: string | undefined;\n  disabled?: boolean;\n}) => {\n  const [inputValue, setInputValue] = useState<string | number>(value);\n  const [isFocused, setIsFocused] = useState(false);\n\n  useEffect(() => {\n    if (!isFocused) {\n      setInputValue(value);\n    }\n  }, [value, isFocused]);\n\n  return (\n    <div className=\"openui-slider-block__validated-input\">\n      <Input\n        type=\"text\"\n        value={inputValue}\n        onChange={(e: ChangeEvent<HTMLInputElement>) => {\n          const { value: newValue } = e.target;\n          setInputValue(newValue);\n\n          if (!isNaN(Number(newValue))) {\n            onChange(Number(newValue));\n          }\n        }}\n        className={clsx(\"openui-slider-block__input\", {\n          \"openui-slider-block__input-error\": error,\n        })}\n        disabled={disabled}\n        onFocus={() => setIsFocused(true)}\n        onBlur={() => setIsFocused(false)}\n      />\n    </div>\n  );\n};\n\nexport const SliderBlock = (props: SliderBlockProps) => {\n  const {\n    label,\n    name,\n    variant,\n    min = 0,\n    max = 100,\n    step,\n    defaultValue,\n    disabled,\n    ...sliderProps\n  } = props;\n\n  const [value, setValue] = useState(defaultValue ?? [min]);\n\n  const { min: minError, max: maxError } = useMemo(() => {\n    const [minValue, maxValue] = value;\n    const checkValue = (v: number) => {\n      if (isNaN(v)) return \"Invalid number\";\n      if (v < min || v > max) return `Value must be between ${min} and ${max}`;\n      return \"\";\n    };\n    const error = { min: checkValue(minValue!), max: checkValue(maxValue!) };\n\n    if (value.length > 1 && minValue! > maxValue!) {\n      error.min = \"Min must be less than max\";\n    }\n\n    return error;\n  }, [value, min, max]);\n\n  const onValueCommitRef = useRef((sliderProps as any)?.onValueCommit);\n  onValueCommitRef.current = (sliderProps as any).onValueCommit;\n\n  const debouncedOnValueCommit = useMemo(\n    () =>\n      debounce((newValue: number[]) => {\n        onValueCommitRef.current?.(newValue);\n      }, 200),\n    [],\n  );\n\n  useEffect(() => {\n    return () => {\n      debouncedOnValueCommit.flush();\n    };\n  }, [debouncedOnValueCommit]);\n\n  const setValueAndCommit = useCallback(\n    (newValue: number[]) => {\n      setValue(newValue);\n      debouncedOnValueCommit(newValue);\n    },\n    [debouncedOnValueCommit],\n  );\n\n  useEffect(() => {\n    setValue(defaultValue ?? [min]);\n  }, [defaultValue, min]);\n\n  const isRange = value.length > 1;\n  const isDiscrete = variant === \"discrete\";\n  const effectiveStep = isDiscrete ? (step ?? 1) : Math.max(1, step ?? 1);\n\n  const controlElements = useMemo(() => {\n    if (isDiscrete) {\n      const allOptions = Array.from(\n        { length: Math.floor((max - min) / effectiveStep) + 1 },\n        (_, i) => min + i * effectiveStep,\n      );\n      return isRange ? (\n        <div className=\"openui-slider-block__controls is-range\">\n          <div className=\"openui-slider-block__validated-select-container\">\n            <Select\n              value={String(value[0])}\n              disabled={disabled}\n              onValueChange={(val) =>\n                setValueAndCommit([Number(val), value[1] ?? max].sort((a, b) => a - b))\n              }\n            >\n              <SelectTrigger>\n                <SelectValue />\n              </SelectTrigger>\n              <SelectContent>\n                {allOptions\n                  .filter((o) => o < (value[1] ?? max))\n                  .map((o) => (\n                    <SelectItem key={o} value={String(o)}>\n                      {String(o)}\n                    </SelectItem>\n                  ))}\n              </SelectContent>\n            </Select>\n            <div className=\"openui-slider-block__separator\" />\n            <Select\n              value={String(value[1])}\n              disabled={disabled}\n              onValueChange={(val) =>\n                setValueAndCommit([value[0] ?? min, Number(val)].sort((a, b) => a - b))\n              }\n            >\n              <SelectTrigger>\n                <SelectValue />\n              </SelectTrigger>\n              <SelectContent>\n                {allOptions\n                  .filter((o) => o > (value[0] ?? min))\n                  .map((o) => (\n                    <SelectItem key={o} value={String(o)}>\n                      {String(o)}\n                    </SelectItem>\n                  ))}\n              </SelectContent>\n            </Select>\n          </div>\n        </div>\n      ) : (\n        <div className=\"openui-slider-block__controls is-single\">\n          <Select\n            value={String(value[0])}\n            disabled={disabled}\n            onValueChange={(val) => setValueAndCommit([Number(val)])}\n          >\n            <SelectTrigger>\n              <SelectValue />\n            </SelectTrigger>\n            <SelectContent>\n              {allOptions.map((o) => (\n                <SelectItem key={o} value={String(o)}>\n                  {String(o)}\n                </SelectItem>\n              ))}\n            </SelectContent>\n          </Select>\n        </div>\n      );\n    } else {\n      return isRange ? (\n        <div className=\"openui-slider-block__controls openui-slider-block__controls--inputs is-range\">\n          <div className=\"openui-slider-block__validated-input-container\">\n            <ValueInput\n              value={value[0] ?? min}\n              onChange={(newMin) => setValueAndCommit([newMin, value[1] ?? max])}\n              error={minError}\n              disabled={disabled}\n            />\n            <div className=\"openui-slider-block__separator\" />\n            <ValueInput\n              value={value[1] ?? max}\n              onChange={(newMax) => setValueAndCommit([value[0] ?? min, newMax])}\n              error={maxError}\n              disabled={disabled}\n            />\n          </div>\n          {(minError || maxError) && (\n            <div className=\"openui-slider-block__error-message\">\n              <AlertCircle size={14} /> {minError || maxError}\n            </div>\n          )}\n        </div>\n      ) : (\n        <div className=\"openui-slider-block__controls openui-slider-block__controls--inputs is-single\">\n          <ValueInput\n            value={value[0] ?? min}\n            onChange={(newVal) => setValueAndCommit([newVal])}\n            error={minError}\n            disabled={disabled}\n          />\n          {minError && (\n            <div className=\"openui-slider-block__error-message\">\n              <AlertCircle size={14} />\n              {minError}\n            </div>\n          )}\n        </div>\n      );\n    }\n  }, [\n    isDiscrete,\n    isRange,\n    value,\n    min,\n    max,\n    effectiveStep,\n    minError,\n    maxError,\n    disabled,\n    setValueAndCommit,\n  ]);\n\n  const hasError = !isDiscrete && (isRange ? Boolean(minError || maxError) : Boolean(minError));\n\n  return (\n    <div className=\"openui-slider-block\">\n      <div\n        className={clsx(\"openui-slider-block__header\", {\n          \"openui-slider-block__header--with-error\": hasError,\n        })}\n      >\n        <span className=\"openui-slider-block__label\">{label}</span>\n        {controlElements}\n      </div>\n      <div className=\"openui-slider-block__content\">\n        <Slider\n          {...sliderProps}\n          value={value}\n          onValueChange={(v) => {\n            setValueAndCommit([...v].sort((a, b) => a - b));\n          }}\n          min={min}\n          max={max}\n          step={effectiveStep}\n          variant={variant}\n          name={name}\n          disabled={disabled}\n        />\n      </div>\n    </div>\n  );\n};\n","import React, { createContext, useContext } from \"react\";\n\nexport interface StepsItemProps {\n  title: React.ReactNode;\n  details: React.ReactNode;\n  number?: number;\n}\n\nexport interface StepsProps {\n  children: React.ReactNode;\n}\n\nconst StepNumberContext = createContext<number>(0);\n\nexport const Steps: React.FC<StepsProps> = ({ children }) => {\n  return (\n    <div className={`openui-steps-container`}>\n      <div className=\"openui-steps\">\n        {React.Children.map(children, (child, index) => (\n          <StepNumberContext.Provider value={index + 1}>{child}</StepNumberContext.Provider>\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport const StepsItem: React.FC<StepsItemProps> = ({ title, details, number }) => {\n  const stepNumber = useContext(StepNumberContext);\n\n  return (\n    <div className=\"openui-step-item\">\n      <div className=\"openui-step-connector\">\n        <div className=\"openui-step-number\">\n          <div className=\"openui-step-number-inner\">\n            {Number.isInteger(number) ? number : stepNumber}\n          </div>\n        </div>\n        <div className=\"openui-connector-line\" />\n      </div>\n      <div className=\"openui-step-content\">\n        <span className=\"openui-step-title\">{title}</span>\n        <div className=\"openui-step-details\">{details}</div>\n      </div>\n    </div>\n  );\n};\n","import clsx from \"clsx\";\nimport { CSSProperties, forwardRef, ReactElement } from \"react\";\nimport { SwitchItemProps } from \"../SwitchItem\";\n\ntype SwitchGroupVariant = \"clear\" | \"card\" | \"sunk\";\nexport interface SwitchGroupProps {\n  children: ReactElement<SwitchItemProps> | ReactElement<SwitchItemProps>[];\n  className?: string;\n  style?: CSSProperties;\n  variant?: SwitchGroupVariant;\n}\n\nconst variants: Record<SwitchGroupVariant, string> = {\n  clear: \"openui-switch-group-clear\",\n  card: \"openui-switch-group-card\",\n  sunk: \"openui-switch-group-sunk\",\n};\n\nconst SwitchGroup = forwardRef<HTMLDivElement, SwitchGroupProps>((props, ref) => {\n  const { children, className, style, variant = \"clear\" } = props;\n  return (\n    <div\n      ref={ref}\n      className={clsx(\"openui-switch-group\", variants[variant], className)}\n      style={style}\n    >\n      {children}\n    </div>\n  );\n});\n\nSwitchGroup.displayName = \"SwitchGroup\";\n\nexport { SwitchGroup };\n","import * as Switch from \"@radix-ui/react-switch\";\nimport clsx from \"clsx\";\nimport { CSSProperties, forwardRef, ReactNode, useId } from \"react\";\n\ninterface SwitchItemProps {\n  label?: ReactNode;\n  description?: ReactNode;\n  className?: string;\n  style?: CSSProperties;\n  checked?: boolean;\n  disabled?: boolean;\n  defaultChecked?: boolean;\n  required?: boolean;\n  name?: string;\n  value?: string;\n  onChange?: (value: boolean) => void;\n}\n\nconst SwitchItem = forwardRef<HTMLButtonElement, SwitchItemProps>((props, ref) => {\n  const { label, description, onChange, className, disabled, required, ...rest } = props;\n  const id = useId();\n  return (\n    <div className=\"openui-switch-item-container\">\n      <Switch.Root\n        ref={ref}\n        onCheckedChange={onChange}\n        id={id}\n        className={clsx(\"openui-switch-item-root\", className)}\n        disabled={disabled}\n        required={required}\n        {...rest}\n      >\n        <Switch.Thumb className=\"openui-switch-item-thumb\" />\n      </Switch.Root>\n      <div className=\"openui-switch-item-content\">\n        {label && (\n          <label htmlFor={id} className=\"openui-switch-item-label\">\n            {label}\n          </label>\n        )}\n        {description && <p className=\"openui-switch-item-description\">{description}</p>}\n      </div>\n    </div>\n  );\n});\n\nSwitchItem.displayName = \"SwitchItem\";\n\nexport { SwitchItem, type SwitchItemProps };\n","import * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport clsx from \"clsx\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { IconButton } from \"../IconButton\";\n\ntype TabsVariant = \"clear\";\n\nexport interface TabsProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root> {\n  className?: string;\n  style?: React.CSSProperties;\n  variant?: TabsVariant;\n}\n\nconst tabsVariants: Record<TabsVariant, string> = {\n  clear: \"openui-tabs-clear\",\n};\n\nexport const Tabs = forwardRef<React.ComponentRef<typeof TabsPrimitive.Root>, TabsProps>(\n  ({ className, style, variant = \"clear\", ...props }, ref) => (\n    <TabsPrimitive.Root\n      ref={ref}\n      className={clsx(\"openui-tabs\", tabsVariants[variant], className)}\n      style={style}\n      {...props}\n    />\n  ),\n);\n\nTabs.displayName = \"Tabs\";\n\ntype TabsListVariant =\n  | \"title\"\n  | \"iconTitle\"\n  | \"iconTitleSubtext\"\n  | \"imageTitle\"\n  | \"imageTitleSubtext\";\n\nconst tabsListVariants: Record<TabsListVariant, string> = {\n  title: \"openui-tabs-list--title\",\n  iconTitle: \"openui-tabs-list--icon-title\",\n  iconTitleSubtext: \"openui-tabs-list--icon-title-subtext\",\n  imageTitle: \"openui-tabs-list--image-title\",\n  imageTitleSubtext: \"openui-tabs-list--image-title-subtext\",\n};\n\nexport interface TabsListProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> {\n  className?: string;\n  style?: React.CSSProperties;\n  variant?: TabsListVariant;\n}\n\nexport const TabsList = forwardRef<React.ComponentRef<typeof TabsPrimitive.List>, TabsListProps>(\n  ({ className, style, variant = \"title\", ...props }, ref) => {\n    const listRef = useRef<HTMLDivElement>(null);\n    const indicatorRef = useRef<HTMLDivElement>(null);\n    const [showLeftButton, setShowLeftButton] = useState(false);\n    const [showRightButton, setShowRightButton] = useState(false);\n\n    const updateIndicator = useCallback((animated: boolean) => {\n      const list = listRef.current;\n      const indicator = indicatorRef.current;\n      if (!list || !indicator) return;\n\n      const activeTab = list.querySelector('[role=\"tab\"][data-state=\"active\"]') as HTMLElement;\n      if (!activeTab) return;\n\n      const left = activeTab.offsetLeft - list.scrollLeft;\n      const width = activeTab.offsetWidth;\n\n      indicator.style.transition = animated\n        ? \"transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), width 0.25s cubic-bezier(0.4, 0, 0.2, 1)\"\n        : \"none\";\n      indicator.style.width = `${width}px`;\n      indicator.style.transform = `translateX(${left}px)`;\n      indicator.style.opacity = \"1\";\n    }, []);\n\n    // Check scroll state and keep indicator in sync while scrolling\n    useEffect(() => {\n      const checkScroll = () => {\n        if (listRef.current) {\n          const { scrollLeft, scrollWidth, clientWidth } = listRef.current;\n          setShowLeftButton(scrollLeft > 0);\n          setShowRightButton(scrollLeft < scrollWidth - clientWidth - 1);\n        }\n      };\n\n      const handleScroll = () => {\n        checkScroll();\n        updateIndicator(false);\n      };\n\n      checkScroll();\n      updateIndicator(false);\n\n      const currentRef = listRef.current;\n      if (currentRef) {\n        currentRef.addEventListener(\"scroll\", handleScroll);\n\n        const resizeObserver = new ResizeObserver(() => {\n          checkScroll();\n          updateIndicator(false);\n        });\n        resizeObserver.observe(currentRef);\n\n        return () => {\n          currentRef.removeEventListener(\"scroll\", handleScroll);\n          resizeObserver.disconnect();\n        };\n      }\n      return () => {};\n    }, [updateIndicator]);\n\n    // Watch for active tab changes and animate indicator\n    useEffect(() => {\n      const list = listRef.current;\n      if (!list) return;\n\n      const observer = new MutationObserver(() => updateIndicator(true));\n      observer.observe(list, {\n        attributes: true,\n        subtree: true,\n        attributeFilter: [\"data-state\"],\n      });\n\n      return () => observer.disconnect();\n    }, [updateIndicator]);\n\n    // Center the clicked trigger in the list\n    useEffect(() => {\n      const list = listRef.current;\n      if (!list) return;\n\n      const handleClick = (e: MouseEvent) => {\n        const trigger = (e.target as HTMLElement).closest('[role=\"tab\"]') as HTMLElement;\n        if (!trigger) return;\n\n        const listWidth = list.clientWidth;\n        const triggerLeft = trigger.offsetLeft;\n        const triggerWidth = trigger.offsetWidth;\n        const scrollTo = triggerLeft - listWidth / 2 + triggerWidth / 2;\n\n        list.scrollTo({ left: scrollTo, behavior: \"smooth\" });\n      };\n\n      list.addEventListener(\"click\", handleClick);\n      return () => list.removeEventListener(\"click\", handleClick);\n    }, []);\n\n    const scrollLeft = () => {\n      if (listRef.current) {\n        listRef.current.scrollBy({ left: -120, behavior: \"smooth\" });\n      }\n    };\n\n    const scrollRight = () => {\n      if (listRef.current) {\n        listRef.current.scrollBy({ left: 120, behavior: \"smooth\" });\n      }\n    };\n\n    return (\n      <div className=\"openui-tabs-list-container\">\n        {showLeftButton && (\n          <div className=\"openui-tabs-scroll-button-container-left\">\n            <IconButton\n              className=\"openui-tabs-scroll-button openui-tabs-scroll-left\"\n              onClick={scrollLeft}\n              aria-label=\"Scroll tabs left\"\n              icon={<ChevronLeft />}\n              variant=\"secondary\"\n              size=\"small\"\n            />\n          </div>\n        )}\n\n        <TabsPrimitive.List\n          ref={(node) => {\n            if (typeof ref === \"function\") {\n              ref(node);\n            } else if (ref) {\n              ref.current = node;\n            }\n            listRef.current = node;\n          }}\n          className={clsx(\"openui-tabs-list\", tabsListVariants[variant], className)}\n          style={style}\n          {...props}\n        />\n\n        <div className=\"openui-tabs-indicator\" ref={indicatorRef} />\n\n        {showRightButton && (\n          <div className=\"openui-tabs-scroll-button-container-right\">\n            <IconButton\n              className=\"openui-tabs-scroll-button openui-tabs-scroll-right\"\n              onClick={scrollRight}\n              aria-label=\"Scroll tabs right\"\n              icon={<ChevronRight />}\n              variant=\"secondary\"\n              size=\"small\"\n            />\n          </div>\n        )}\n      </div>\n    );\n  },\n);\n\nTabsList.displayName = \"TabsList\";\n\nexport interface TabsTriggerProps\n  extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> {\n  className?: string;\n  style?: React.CSSProperties;\n  value: string;\n  icon?: React.ReactNode;\n  text: React.ReactNode;\n  subtext?: React.ReactNode;\n  image?: string;\n}\n\nexport const TabsTrigger = forwardRef<\n  React.ComponentRef<typeof TabsPrimitive.Trigger>,\n  TabsTriggerProps\n>(({ className, style, icon, text, subtext, image, value, ...props }, ref) => (\n  <TabsPrimitive.Trigger\n    ref={ref}\n    className={clsx(\"openui-tabs-trigger\", className)}\n    style={style}\n    value={value}\n    {...props}\n  >\n    {image && (\n      <span className=\"openui-tabs-trigger-image\">\n        <img src={image} alt=\"\" />\n      </span>\n    )}\n    {icon && <span className=\"openui-tabs-trigger-icon\">{icon}</span>}\n    <span className=\"openui-tabs-trigger-content\">\n      {text && <span className=\"openui-tabs-trigger-text\">{text}</span>}\n      {subtext && <span className=\"openui-tabs-trigger-subtext\">{subtext}</span>}\n    </span>\n  </TabsPrimitive.Trigger>\n));\n\nTabsTrigger.displayName = \"TabsTrigger\";\n\nexport interface TabsContentProps\n  extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content> {\n  className?: string;\n  style?: React.CSSProperties;\n  children?: React.ReactNode;\n}\n\nexport const TabsContent = forwardRef<\n  React.ComponentRef<typeof TabsPrimitive.Content>,\n  TabsContentProps\n>(({ className, style, children, ...props }, ref) => (\n  <TabsPrimitive.Content\n    ref={ref}\n    className={clsx(\"openui-tabs-content\", className)}\n    style={style}\n    {...props}\n  >\n    <div className=\"openui-tabs-content-inner\">{children}</div>\n  </TabsPrimitive.Content>\n));\n\nTabsContent.displayName = \"TabsContent\";\n","import clsx from \"clsx\";\nimport { CSSProperties, forwardRef, ReactNode } from \"react\";\n\nexport type TagSize = \"sm\" | \"md\" | \"lg\";\nexport type TagVariant = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nconst sizeMap: Record<TagSize, string> = {\n  sm: \"openui-tag-sm\",\n  md: \"openui-tag-md\",\n  lg: \"openui-tag-lg\",\n};\n\nconst variantMap: Record<TagVariant, string> = {\n  neutral: \"openui-tag-neutral\",\n  info: \"openui-tag-info\",\n  success: \"openui-tag-success\",\n  warning: \"openui-tag-warning\",\n  danger: \"openui-tag-danger\",\n};\n\nexport interface TagProps {\n  className?: string;\n  styles?: CSSProperties;\n  icon?: ReactNode;\n  text: ReactNode;\n  size?: TagSize;\n  variant?: TagVariant;\n}\n\nexport const Tag = forwardRef<HTMLDivElement, TagProps>((props, ref) => {\n  const { className, styles, icon, text, size = \"md\", variant = \"neutral\", ...rest } = props;\n  return (\n    <div\n      ref={ref}\n      className={clsx(\"openui-tag\", sizeMap[size], variantMap[variant], className)}\n      style={styles}\n      {...rest}\n    >\n      {icon && <span className=\"openui-tag-icon\">{icon}</span>}\n      <span className=\"openui-tag-text\">{text}</span>\n    </div>\n  );\n});\n\nTag.displayName = \"Tag\";\n","import clsx from \"clsx\";\nimport { CSSProperties, forwardRef, ReactElement } from \"react\";\nimport { Tag } from \"../Tag\";\n\nexport interface TagBlockProps {\n  children: ReactElement<typeof Tag> | ReactElement<typeof Tag>[];\n  styles?: CSSProperties;\n  className?: string;\n}\n\nexport const TagBlock = forwardRef<HTMLDivElement, TagBlockProps>((props, ref) => {\n  return (\n    <div ref={ref} className={clsx(\"openui-tag-block\", props.className)} style={props.styles}>\n      {props.children}\n    </div>\n  );\n});\n\nTagBlock.displayName = \"TagBlock\";\n","import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { useFormControlContext } from \"../FormControl/context\";\n\nexport interface TextAreaProps\n  extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\"> {\n  className?: string;\n  placeholder?: string;\n  rows?: number;\n  hasError?: boolean;\n}\n\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>((props, ref) => {\n  const { className, rows = 3, hasError, ...rest } = props;\n  const ctx = useFormControlContext();\n  const resolvedHasError = hasError ?? ctx?.hasError ?? false;\n\n  return (\n    <textarea\n      ref={ref}\n      className={clsx(\"openui-textarea\", className, {\n        \"openui-textarea-error\": resolvedHasError,\n      })}\n      {...rest}\n      rows={rows}\n    />\n  );\n});\n\nTextArea.displayName = \"TextArea\";\n\nexport { TextArea };\n","import clsx from \"clsx\";\nimport React from \"react\";\n\ntype TextCalloutVariant = \"neutral\" | \"info\" | \"warning\" | \"success\" | \"danger\";\n\nexport interface TextCalloutProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n  variant?: TextCalloutVariant;\n  title?: React.ReactNode;\n  description?: React.ReactNode;\n}\n\nconst variantMap: Record<TextCalloutVariant, string> = {\n  neutral: \"openui-text-callout-neutral\",\n  info: \"openui-text-callout-info\",\n  warning: \"openui-text-callout-warning\",\n  success: \"openui-text-callout-success\",\n  danger: \"openui-text-callout-danger\",\n};\n\nexport const TextCallout = React.forwardRef<HTMLDivElement, TextCalloutProps>((props, ref) => {\n  const { className, variant = \"neutral\", title, description, ...rest } = props;\n\n  return (\n    <div\n      ref={ref}\n      className={clsx(\"openui-text-callout\", variantMap[variant], className)}\n      {...rest}\n    >\n      <div className=\"openui-text-callout-content\">\n        {title && <span className=\"openui-text-callout-content-title\">{title}</span>}\n        {description && (\n          <span className=\"openui-text-callout-content-description\">{description}</span>\n        )}\n      </div>\n    </div>\n  );\n});\n","import clsx from \"clsx\";\nimport { CSSProperties, ReactNode } from \"react\";\n\nexport type TextContentVariant = \"clear\" | \"card\" | \"sunk\";\n\nexport interface TextContentProps {\n  children: ReactNode;\n  variant?: TextContentVariant;\n  className?: string;\n  style?: CSSProperties;\n}\n\nconst variants: Record<TextContentVariant, string> = {\n  clear: \"text-content-clear\",\n  card: \"text-content-card\",\n  sunk: \"text-content-sunk\",\n};\n\nconst TextContent = (props: TextContentProps) => {\n  const { children, variant = \"sunk\", className, style } = props;\n\n  return (\n    <div className={clsx(\"text-content\", variants[variant], className)} style={style}>\n      {children}\n    </div>\n  );\n};\n\nexport { TextContent };\n","import { reactive } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\n\nexport const CalloutSchema = z.object({\n  variant: z.enum([\"info\", \"warning\", \"error\", \"success\", \"neutral\"]),\n  title: z.string(),\n  description: z.string(),\n  visible: reactive(z.boolean().optional()),\n});\n","\"use client\";\n\nimport { defineComponent, useStateField } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { Callout as OpenUICallout } from \"../../components/Callout\";\nimport { MarkDownRenderer } from \"../../components/MarkDownRenderer\";\nimport { CalloutSchema } from \"./schema\";\n\nexport { CalloutSchema } from \"./schema\";\n\nexport const Callout = defineComponent({\n  name: \"Callout\",\n  props: CalloutSchema,\n  description:\n    \"Callout banner. Optional visible is a reactive $boolean — auto-dismisses after 3s by setting $visible to false.\",\n  component: ({ props }) => {\n    const field = useStateField(\"visible\", props.visible);\n\n    const hasVisibleBinding = field.isReactive;\n    const isVisible = hasVisibleBinding\n      ? field.value === true || (field.value as any) === \"true\"\n      : true;\n\n    // Auto-dismiss: set $visible = false after 3s\n    React.useEffect(() => {\n      if (!hasVisibleBinding || !isVisible) return;\n      const timer = setTimeout(() => {\n        field.setValue(false);\n      }, 3000);\n      return () => clearTimeout(timer);\n    }, [hasVisibleBinding, isVisible, field]);\n\n    if (!isVisible) return null;\n\n    const variantMap: Record<string, \"neutral\" | \"info\" | \"warning\" | \"success\"> = {\n      info: \"info\",\n      warning: \"warning\",\n      success: \"success\",\n      error: \"warning\",\n      neutral: \"neutral\",\n    };\n    return (\n      <OpenUICallout\n        variant={variantMap[props.variant as string] || \"info\"}\n        title={props.title as string}\n        description={<MarkDownRenderer textMarkdown={props.description as string} />}\n        duration={hasVisibleBinding ? 3000 : undefined}\n      />\n    );\n  },\n});\n","import { z } from \"zod/v4\";\n\nexport const CardHeaderSchema = z.object({\n  title: z.string().optional(),\n  subtitle: z.string().optional(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { CardHeader as OpenUICardHeader } from \"../../components/CardHeader\";\nimport { CardHeaderSchema } from \"./schema\";\n\nexport { CardHeaderSchema } from \"./schema\";\n\nexport const CardHeader = defineComponent({\n  name: \"CardHeader\",\n  props: CardHeaderSchema,\n  description: \"Header with optional title and subtitle\",\n  component: ({ props }) => <OpenUICardHeader title={props.title} subtitle={props.subtitle} />,\n});\n","import { z } from \"zod/v4\";\n\nexport const CodeBlockSchema = z.object({\n  language: z.string(),\n  codeString: z.string(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { CodeBlock as OpenUICodeBlock } from \"../../components/CodeBlock\";\nimport { CodeBlockSchema } from \"./schema\";\n\nexport { CodeBlockSchema } from \"./schema\";\n\nexport const CodeBlock = defineComponent({\n  name: \"CodeBlock\",\n  props: CodeBlockSchema,\n  description: \"Syntax-highlighted code block\",\n  component: ({ props }) => (\n    <OpenUICodeBlock language={props.language as string} codeString={props.codeString as string} />\n  ),\n});\n","import { z } from \"zod/v4\";\n\nexport const ImageSchema = z.object({\n  alt: z.string(),\n  src: z.string().optional(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { Image as OpenUIImage } from \"../../components/Image\";\nimport { ImageSchema } from \"./schema\";\n\nexport { ImageSchema } from \"./schema\";\n\nexport const Image = defineComponent({\n  name: \"Image\",\n  props: ImageSchema,\n  description: \"Image with alt text and optional URL\",\n  component: ({ props }) => (\n    <OpenUIImage src={(props.src as string) || \"\"} alt={props.alt as string} />\n  ),\n});\n","import { z } from \"zod/v4\";\n\nexport const ImageBlockSchema = z.object({\n  src: z.string(),\n  alt: z.string().optional(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { ImageBlock as OpenUIImageBlock } from \"../../components/ImageBlock\";\nimport { ImageBlockSchema } from \"./schema\";\n\nexport { ImageBlockSchema } from \"./schema\";\n\nexport const ImageBlock = defineComponent({\n  name: \"ImageBlock\",\n  props: ImageBlockSchema,\n  description: \"Image block with loading state\",\n  component: ({ props }) => (\n    <OpenUIImageBlock src={props.src as string} alt={props.alt as string | undefined} />\n  ),\n});\n","import { z } from \"zod/v4\";\n\nconst ImageItemSchema = z.object({\n  src: z.string(),\n  alt: z.string().optional(),\n  details: z.string().optional(),\n});\n\nexport const ImageGallerySchema = z.object({\n  images: z.array(ImageItemSchema),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { ImageGallery as OpenUIImageGallery } from \"../../components/ImageGallery\";\nimport { ImageGallerySchema } from \"./schema\";\n\nexport { ImageGallerySchema } from \"./schema\";\n\nexport const ImageGallery = defineComponent({\n  name: \"ImageGallery\",\n  props: ImageGallerySchema,\n  description: \"Gallery grid of images with modal preview\",\n  component: ({ props }) => {\n    const images = Array.isArray(props.images) ? props.images : [];\n    if (!images.length) return null;\n    return (\n      <OpenUIImageGallery images={images as { src: string; alt?: string; details?: string }[]} />\n    );\n  },\n});\n","import { z } from \"zod/v4\";\n\nexport const MarkDownRendererSchema = z.object({\n  textMarkdown: z.string(),\n  variant: z.enum([\"clear\", \"card\", \"sunk\"]).optional(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { MarkDownRenderer as OpenUIMarkDownRenderer } from \"../../components/MarkDownRenderer\";\nimport { MarkDownRendererSchema } from \"./schema\";\n\nexport { MarkDownRendererSchema } from \"./schema\";\n\nexport const MarkDownRenderer = defineComponent({\n  name: \"MarkDownRenderer\",\n  props: MarkDownRendererSchema,\n  description: \"Renders markdown text with optional container variant\",\n  component: ({ props }) => (\n    <OpenUIMarkDownRenderer\n      textMarkdown={props.textMarkdown as string}\n      variant={props.variant as \"clear\" | \"card\" | \"sunk\" | undefined}\n    />\n  ),\n});\n","import { z } from \"zod/v4\";\n\nexport const SeparatorSchema = z.object({\n  orientation: z.enum([\"horizontal\", \"vertical\"]).optional(),\n  decorative: z.boolean().optional(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { Separator as OpenUISeparator } from \"../../components/Separator\";\nimport { SeparatorSchema } from \"./schema\";\n\nexport * from \"./schema\";\n\nexport const Separator = defineComponent({\n  name: \"Separator\",\n  props: SeparatorSchema,\n  description: \"Visual divider between content sections\",\n  component: ({ props }) => (\n    <OpenUISeparator\n      orientation={props.orientation as \"horizontal\" | \"vertical\" | undefined}\n      decorative={props.decorative as boolean | undefined}\n    />\n  ),\n});\n","import { z } from \"zod/v4\";\n\nexport const TextCalloutSchema = z.object({\n  variant: z.enum([\"neutral\", \"info\", \"warning\", \"success\", \"danger\"]).optional(),\n  title: z.string().optional(),\n  description: z.string().optional(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { TextCallout as OpenUITextCallout } from \"../../components/TextCallout\";\nimport { TextCalloutSchema } from \"./schema\";\n\nexport { TextCalloutSchema } from \"./schema\";\n\nexport const TextCallout = defineComponent({\n  name: \"TextCallout\",\n  props: TextCalloutSchema,\n  description: \"Text callout with variant, title, and description\",\n  component: ({ props }) => (\n    <OpenUITextCallout\n      variant={props.variant as \"neutral\" | \"info\" | \"warning\" | \"success\" | \"danger\" | undefined}\n      title={props.title}\n      description={props.description}\n    />\n  ),\n});\n","import { z } from \"zod/v4\";\n\nexport const TextContentSchema = z.object({\n  text: z.string(),\n  size: z.enum([\"small\", \"default\", \"large\", \"small-heavy\", \"large-heavy\"]).optional(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { MarkDownRenderer } from \"../../components/MarkDownRenderer\";\nimport { TextContentSchema } from \"./schema\";\nconst BODY_SIZE_VARS: Record<string, string> = {\n  small: \"--openui-text-body-sm\",\n  default: \"--openui-text-body-default\",\n  large: \"--openui-text-body-lg\",\n  \"small-heavy\": \"--openui-text-body-sm-heavy\",\n  \"large-heavy\": \"--openui-text-body-lg-heavy\",\n};\n\nexport { TextContentSchema } from \"./schema\";\n\nexport const TextContent = defineComponent({\n  name: \"TextContent\",\n  props: TextContentSchema,\n  description:\n    'Text block. Supports markdown. Optional size: \"small\" | \"default\" | \"large\" | \"small-heavy\" | \"large-heavy\".',\n  component: ({ props }) => {\n    const size = (props.size as string) ?? \"default\";\n    const varName = BODY_SIZE_VARS[size] ?? BODY_SIZE_VARS[\"default\"];\n    const style =\n      size === \"default\"\n        ? undefined\n        : ({\n            \"--openui-text-body-default\": `var(${varName})`,\n            \"--openui-text-body-default-letter-spacing\": `var(${varName}-letter-spacing)`,\n          } as React.CSSProperties);\n    const text = props.text == null ? \"\" : String(props.text);\n    return (\n      <div style={style}>\n        <MarkDownRenderer textMarkdown={text} />\n      </div>\n    );\n  },\n});\n","import { defineComponent } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\n\nexport const PointSchema = z.object({\n  x: z.number(),\n  y: z.number(),\n  z: z.number().optional(),\n});\n\nexport const Point = defineComponent({\n  name: \"Point\",\n  props: PointSchema,\n  description: \"Data point with numeric coordinates\",\n  component: () => null,\n});\n","import { defineComponent } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { PointSchema } from \"./Point\";\n\nexport const ScatterSeriesSchema = z.object({\n  name: z.string(),\n  points: z.array(PointSchema),\n});\n\nexport const ScatterSeries = defineComponent({\n  name: \"ScatterSeries\",\n  props: ScatterSeriesSchema,\n  description: \"Named dataset\",\n  component: () => null,\n});\n","import { defineComponent } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\n\nexport const SeriesSchema = z.object({\n  category: z.string(),\n  values: z.array(z.number()),\n});\n\nexport const Series = defineComponent({\n  name: \"Series\",\n  props: SeriesSchema,\n  description: \"One data series\",\n  component: () => null,\n});\n","import { defineComponent } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\n\nexport const SliceSchema = z.object({\n  category: z.string(),\n  value: z.number(),\n});\n\nexport const Slice = defineComponent({\n  name: \"Slice\",\n  props: SliceSchema,\n  description: \"One slice with label and numeric value\",\n  component: () => null,\n});\n","type ElementLike = {\n  type: \"element\";\n  props: Record<string, unknown>;\n};\n\nexport function hasAllProps(obj: Record<string, unknown>, ...keys: string[]): boolean {\n  return keys.every((k) => obj[k] != null);\n}\n\nexport function asArray(v: unknown): unknown[] {\n  if (Array.isArray(v)) return v;\n  if (v == null) return [];\n  return [v];\n}\n\nfunction asElementNodes(v: unknown): ElementLike[] {\n  return asArray(v).filter(\n    (x): x is ElementLike =>\n      typeof x === \"object\" && x !== null && (x as Record<string, unknown>)[\"type\"] === \"element\",\n  );\n}\n\nexport function buildChartData(\n  labels: unknown,\n  series: unknown,\n): Record<string, string | number>[] {\n  const lbls = asArray(labels) as string[];\n\n  // Tabular format: labels = column names, series = 2D rows from Query results\n  // e.g. AreaChart(data.columns, data.results) where columns=[\"day\",\"views\",\"users\"]\n  // and results=[[\"Mon\",100,50],[\"Tue\",200,75]]\n  const rows = asArray(series);\n  if (rows.length > 0 && Array.isArray(rows[0])) {\n    // Column 0 = category labels, columns 1+ = series values\n    const seriesNames = lbls.slice(1);\n    return rows.map((row) => {\n      const cells = row as unknown[];\n      const point: Record<string, string | number> = { category: String(cells[0] ?? \"\") };\n      seriesNames.forEach((name, si) => {\n        const val = cells[si + 1];\n        point[name] = typeof val === \"number\" ? val : Number(val) || 0;\n      });\n      return point;\n    });\n  }\n\n  // Original format: labels = x-axis values, series = Series() elements\n  const seriesNodes = asElementNodes(series);\n  return lbls.map((label, i) => {\n    const point: Record<string, string | number> = { category: label };\n    seriesNodes.forEach((s) => {\n      const cat = s.props[\"category\"];\n      const vals = s.props[\"values\"];\n      if (typeof cat === \"string\" && Array.isArray(vals) && i < vals.length) {\n        point[cat] = vals[i]!;\n      }\n    });\n    return point;\n  });\n}\n\nexport function buildSliceData(slices: unknown): Record<string, string | number>[] {\n  return asElementNodes(slices).map((s) => ({\n    category: s.props[\"category\"] as string,\n    value: s.props[\"value\"] as number,\n  }));\n}\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { HorizontalBarChart as HorizontalBarChartComponent } from \"../../components/Charts\";\nimport { buildChartData, hasAllProps } from \"../helpers\";\nimport { SeriesSchema } from \"./Series\";\n\nexport const HorizontalBarChartSchema = z.object({\n  labels: z.array(z.string()),\n  series: z.array(SeriesSchema),\n  variant: z.enum([\"grouped\", \"stacked\"]).optional(),\n  xLabel: z.string().optional(),\n  yLabel: z.string().optional(),\n});\n\nexport const HorizontalBarChart = defineComponent({\n  name: \"HorizontalBarChart\",\n  props: HorizontalBarChartSchema,\n  description: \"Horizontal bars; prefer when category labels are long or for ranked lists\",\n  component: ({ props }) => {\n    if (!hasAllProps(props as Record<string, unknown>, \"labels\", \"series\")) return null;\n    const data = buildChartData(props.labels, props.series);\n    if (!data.length) return null;\n    return React.createElement(HorizontalBarChartComponent, {\n      data,\n      categoryKey: \"category\",\n      variant: props.variant as \"grouped\" | \"stacked\" | undefined,\n      xAxisLabel: props.xLabel,\n      yAxisLabel: props.yLabel,\n      isAnimationActive: false,\n    });\n  },\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { RadarChart as RadarChartComponent } from \"../../components/Charts\";\nimport { buildChartData, hasAllProps } from \"../helpers\";\nimport { SeriesSchema } from \"./Series\";\n\nexport const RadarChartSchema = z.object({\n  labels: z.array(z.string()),\n  series: z.array(SeriesSchema),\n});\n\nexport const RadarChart = defineComponent({\n  name: \"RadarChart\",\n  props: RadarChartSchema,\n  description: \"Spider/web chart; use for comparing multiple variables across one or more entities\",\n  component: ({ props }) => {\n    if (!hasAllProps(props as Record<string, unknown>, \"labels\", \"series\")) return null;\n    const data = buildChartData(props.labels, props.series);\n    if (!data.length) return null;\n    return React.createElement(RadarChartComponent, {\n      data,\n      categoryKey: \"category\",\n      isAnimationActive: false,\n    });\n  },\n});\n","\"use client\";\n\nimport { defineComponent, useIsQueryLoading } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { PieChart as PieChartComponent } from \"../../components/Charts\";\nimport { PieChartSkeleton } from \"../../components/Skeleton\";\nimport { asArray, buildSliceData } from \"../helpers\";\n\nexport const PieChartSchema = z.object({\n  labels: z.array(z.string()),\n  values: z.array(z.number()),\n  variant: z.enum([\"pie\", \"donut\"]).optional(),\n  appearance: z.enum([\"circular\", \"semiCircular\"]).optional(),\n});\n\nexport const PieChart = defineComponent({\n  name: \"PieChart\",\n  props: PieChartSchema,\n  description: \"Circular slices; use plucked arrays: PieChart(data.categories, data.values)\",\n  component: ({ props }) => {\n    const isQueryLoading = useIsQueryLoading();\n    const labels = asArray(props.labels) as string[];\n    const values = asArray(props.values) as number[];\n    const variant = (props.variant as \"pie\" | \"donut\") ?? \"pie\";\n    const appearance = (props.appearance as \"circular\" | \"semiCircular\") ?? \"circular\";\n\n    // New format: labels[] + values[]\n    if (labels.length > 0 && values.length > 0) {\n      const data = labels.map((cat, i) => ({\n        category: cat,\n        value: typeof values[i] === \"number\" ? values[i] : 0,\n      }));\n      return React.createElement(PieChartComponent, {\n        data,\n        categoryKey: \"category\",\n        dataKey: \"value\",\n        variant,\n        appearance,\n        isAnimationActive: false,\n      });\n    }\n\n    // Legacy fallback: Slice[] objects (backwards compat)\n    const sliceData = buildSliceData(props.labels);\n    if (sliceData.length) {\n      return React.createElement(PieChartComponent, {\n        data: sliceData,\n        categoryKey: \"category\",\n        dataKey: \"value\",\n        variant,\n        appearance,\n        isAnimationActive: false,\n      });\n    }\n\n    if (isQueryLoading) {\n      return React.createElement(PieChartSkeleton, {\n        variant,\n        appearance,\n      });\n    }\n\n    return null;\n  },\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { RadialChart as RadialChartComponent } from \"../../components/Charts\";\nimport { asArray, buildSliceData } from \"../helpers\";\n\nexport const RadialChartSchema = z.object({\n  labels: z.array(z.string()),\n  values: z.array(z.number()),\n});\n\nexport const RadialChart = defineComponent({\n  name: \"RadialChart\",\n  props: RadialChartSchema,\n  description: \"Radial bars; use plucked arrays: RadialChart(data.categories, data.values)\",\n  component: ({ props }) => {\n    const labels = asArray(props.labels) as string[];\n    const values = asArray(props.values) as number[];\n\n    if (labels.length > 0 && values.length > 0) {\n      const data = labels.map((cat, i) => ({\n        category: cat,\n        value: typeof values[i] === \"number\" ? values[i] : 0,\n      }));\n      if (!data.length) return null;\n      return React.createElement(RadialChartComponent, {\n        data,\n        categoryKey: \"category\",\n        dataKey: \"value\",\n        isAnimationActive: false,\n      });\n    }\n\n    const sliceData = buildSliceData(props.labels);\n    if (sliceData.length) {\n      return React.createElement(RadialChartComponent, {\n        data: sliceData,\n        categoryKey: \"category\",\n        dataKey: \"value\",\n        isAnimationActive: false,\n      });\n    }\n\n    return null;\n  },\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { SingleStackedBar as SingleStackedBarChartComponent } from \"../../components/Charts\";\nimport { asArray, buildSliceData } from \"../helpers\";\n\nexport const SingleStackedBarChartSchema = z.object({\n  labels: z.array(z.string()),\n  values: z.array(z.number()),\n});\n\nexport const SingleStackedBarChart = defineComponent({\n  name: \"SingleStackedBarChart\",\n  props: SingleStackedBarChartSchema,\n  description:\n    \"Single horizontal stacked bar; use plucked arrays: SingleStackedBarChart(data.categories, data.values)\",\n  component: ({ props }) => {\n    const labels = asArray(props.labels) as string[];\n    const values = asArray(props.values) as number[];\n\n    if (labels.length > 0 && values.length > 0) {\n      const data = labels.map((cat, i) => ({\n        category: cat,\n        value: typeof values[i] === \"number\" ? values[i] : 0,\n      }));\n      if (!data.length) return null;\n      return React.createElement(SingleStackedBarChartComponent, {\n        data,\n        categoryKey: \"category\",\n        dataKey: \"value\",\n      });\n    }\n\n    const sliceData = buildSliceData(props.labels);\n    if (sliceData.length) {\n      return React.createElement(SingleStackedBarChartComponent, {\n        data: sliceData,\n        categoryKey: \"category\",\n        dataKey: \"value\",\n      });\n    }\n\n    return null;\n  },\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { ScatterChart as ScatterChartComponent } from \"../../components/Charts\";\nimport { asArray, hasAllProps } from \"../helpers\";\nimport { ScatterSeriesSchema } from \"./ScatterSeries\";\n\nexport const ScatterChartSchema = z.object({\n  datasets: z.array(ScatterSeriesSchema),\n  xLabel: z.string().optional(),\n  yLabel: z.string().optional(),\n});\n\nconst unwrap = (node: any) => (node?.type === \"element\" ? node.props : node);\n\nexport const ScatterChart = defineComponent({\n  name: \"ScatterChart\",\n  props: ScatterChartSchema,\n  description: \"X/Y scatter plot; use for correlations, distributions, and clustering\",\n  component: ({ props }) => {\n    if (!hasAllProps(props as Record<string, unknown>, \"datasets\")) return null;\n    const rawDatasets = asArray((props as any).datasets);\n    const data = rawDatasets.map((ds: any) => {\n      const dsProps = unwrap(ds);\n      const rawPoints = asArray(dsProps?.points);\n      return {\n        name: (dsProps?.name ?? \"\") as string,\n        data: rawPoints.map((pt: any) => {\n          const ptProps = unwrap(pt);\n          return {\n            x: Number(ptProps?.x),\n            y: Number(ptProps?.y),\n            ...(ptProps?.z != null ? { z: Number(ptProps.z) } : {}),\n          };\n        }),\n      };\n    });\n    if (!data.length) return null;\n    return React.createElement(ScatterChartComponent, {\n      data,\n      xAxisDataKey: \"x\",\n      yAxisDataKey: \"y\",\n      isAnimationActive: false,\n    });\n  },\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { AreaChartCondensed as AreaChartCondensedComponent } from \"../../components/Charts\";\nimport { buildChartData, hasAllProps } from \"../helpers\";\nimport { SeriesSchema } from \"./Series\";\n\nexport const AreaChartCondensedSchema = z.object({\n  labels: z.array(z.string()),\n  series: z.array(SeriesSchema),\n  variant: z.enum([\"linear\", \"natural\", \"step\"]).optional(),\n  xLabel: z.string().optional(),\n  yLabel: z.string().optional(),\n});\n\nexport const AreaChartCondensed = defineComponent({\n  name: \"AreaChart\",\n  props: AreaChartCondensedSchema,\n  description: \"Filled area under lines; use for cumulative totals or volume trends over time\",\n  component: ({ props }) => {\n    if (!hasAllProps(props as Record<string, unknown>, \"labels\", \"series\")) return null;\n    const data = buildChartData(props.labels, props.series);\n    if (!data.length) return null;\n    return React.createElement(AreaChartCondensedComponent, {\n      data,\n      categoryKey: \"category\",\n      variant: props.variant as \"linear\" | \"natural\" | \"step\" | undefined,\n      xAxisLabel: props.xLabel,\n      yAxisLabel: props.yLabel,\n      isAnimationActive: false,\n    });\n  },\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { BarChartCondensed as BarChartCondensedComponent } from \"../../components/Charts\";\nimport { buildChartData, hasAllProps } from \"../helpers\";\nimport { SeriesSchema } from \"./Series\";\n\nexport const BarChartCondensedSchema = z.object({\n  labels: z.array(z.string()),\n  series: z.array(SeriesSchema),\n  variant: z.enum([\"grouped\", \"stacked\"]).optional(),\n  xLabel: z.string().optional(),\n  yLabel: z.string().optional(),\n});\n\nexport const BarChartCondensed = defineComponent({\n  name: \"BarChart\",\n  props: BarChartCondensedSchema,\n  description: \"Vertical bars; use for comparing values across categories with one or more series\",\n  component: ({ props }) => {\n    if (!hasAllProps(props as Record<string, unknown>, \"labels\", \"series\")) return null;\n    const data = buildChartData(props.labels, props.series);\n    if (!data.length) return null;\n    return React.createElement(BarChartCondensedComponent, {\n      data,\n      categoryKey: \"category\",\n      variant: props.variant as \"grouped\" | \"stacked\" | undefined,\n      xAxisLabel: props.xLabel,\n      yAxisLabel: props.yLabel,\n      isAnimationActive: false,\n    });\n  },\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { LineChartCondensed as LineChartCondensedComponent } from \"../../components/Charts\";\nimport { buildChartData, hasAllProps } from \"../helpers\";\nimport { SeriesSchema } from \"./Series\";\n\nexport const LineChartCondensedSchema = z.object({\n  labels: z.array(z.string()),\n  series: z.array(SeriesSchema),\n  variant: z.enum([\"linear\", \"natural\", \"step\"]).optional(),\n  xLabel: z.string().optional(),\n  yLabel: z.string().optional(),\n});\n\nexport const LineChartCondensed = defineComponent({\n  name: \"LineChart\",\n  props: LineChartCondensedSchema,\n  description: \"Lines over categories; use for trends and continuous data over time\",\n  component: ({ props }) => {\n    if (!hasAllProps(props as Record<string, unknown>, \"labels\", \"series\")) return null;\n    const data = buildChartData(props.labels, props.series);\n    if (!data.length) return null;\n    return React.createElement(LineChartCondensedComponent, {\n      data,\n      categoryKey: \"category\",\n      variant: props.variant as \"linear\" | \"natural\" | \"step\" | undefined,\n      xAxisLabel: props.xLabel,\n      yAxisLabel: props.yLabel,\n      isAnimationActive: false,\n    });\n  },\n});\n","import { z } from \"zod/v4\";\n\nexport const ColSchema = z.object({\n  /** Column header label */\n  label: z.string(),\n  /** Column data — array of values or components (one per row). Use array pluck for text, Each() for styled cells like Tag. */\n  data: z.any(),\n  /** Optional display type hint */\n  type: z.enum([\"string\", \"number\", \"action\"]).optional(),\n});\n","\"use client\";\n\nimport { defineComponent, useIsQueryLoading } from \"@openuidev/react-lang\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { TableSkeleton } from \"../../components/Skeleton\";\nimport {\n  ScrollableTable as OpenUITable,\n  TableBody as OpenUITableBody,\n  TableCell as OpenUITableCell,\n  TableHead as OpenUITableHead,\n  TableHeader as OpenUITableHeader,\n  TableRow as OpenUITableRow,\n} from \"../../components/Table\";\nimport { asArray } from \"../helpers\";\nimport { ColSchema } from \"./schema\";\n\nexport { ColSchema } from \"./schema\";\n\nconst DEFAULT_PAGE_SIZE = 10;\n\nexport const Col = defineComponent({\n  name: \"Col\",\n  props: ColSchema,\n  description: \"Column definition — holds label + data array\",\n  component: () => null,\n});\n\nexport const Table = defineComponent({\n  name: \"Table\",\n  props: z.object({\n    columns: z.array(Col.ref),\n  }),\n  description: \"Data table — column-oriented. Each Col holds its own data array.\",\n  component: ({ props, renderNode }) => {\n    const isQueryLoading = useIsQueryLoading();\n    const effectivePageSize = DEFAULT_PAGE_SIZE;\n\n    const [currentPage, setCurrentPage] = React.useState(0);\n\n    const columns = props.columns ?? [];\n\n    const colDefs = columns\n      .filter((c: any) => c != null && c.props)\n      .map((c: any) => ({\n        label: c.props?.label ?? \"\",\n        data: asArray(c.props?.data ?? []),\n      }));\n\n    const rowCount = colDefs.length > 0 ? Math.max(...colDefs.map((c) => c.data.length), 0) : 0;\n\n    if (isQueryLoading && rowCount === 0) {\n      const skeletonCols = Math.max(colDefs.length || columns.length, 3);\n      return <TableSkeleton rows={5} columns={skeletonCols} />;\n    }\n\n    if (!colDefs.length) return null;\n\n    const totalPages = Math.ceil(rowCount / effectivePageSize);\n    const safePage = Math.min(currentPage, Math.max(0, totalPages - 1));\n    const startRow = safePage * effectivePageSize;\n    const endRow = Math.min(startRow + effectivePageSize, rowCount);\n    const visibleRowCount = endRow - startRow;\n\n    return (\n      <div>\n        <OpenUITable>\n          <OpenUITableHeader>\n            <OpenUITableRow>\n              {colDefs.map((c, i) => (\n                <OpenUITableHead key={i}>{c.label}</OpenUITableHead>\n              ))}\n            </OpenUITableRow>\n          </OpenUITableHeader>\n          <OpenUITableBody>\n            {Array.from({ length: visibleRowCount }, (_, i) => {\n              const ri = startRow + i;\n              return (\n                <OpenUITableRow key={ri}>\n                  {colDefs.map((col, ci) => {\n                    const cell = col.data[ri];\n                    return (\n                      <OpenUITableCell key={ci}>\n                        {typeof cell === \"object\" && cell !== null\n                          ? renderNode(cell)\n                          : String(cell ?? \"\")}\n                      </OpenUITableCell>\n                    );\n                  })}\n                </OpenUITableRow>\n              );\n            })}\n          </OpenUITableBody>\n        </OpenUITable>\n        {totalPages > 1 && (\n          <div\n            style={{\n              display: \"flex\",\n              alignItems: \"center\",\n              justifyContent: \"flex-end\",\n              gap: \"8px\",\n              paddingTop: \"8px\",\n            }}\n          >\n            <IconButton\n              aria-label=\"Previous page\"\n              size=\"small\"\n              variant=\"secondary\"\n              icon={<ChevronLeft size={16} />}\n              disabled={safePage === 0}\n              onClick={() => setCurrentPage((p) => Math.max(0, p - 1))}\n            />\n            <span style={{ fontSize: \"13px\", color: \"#6b7280\" }}>\n              {safePage + 1} / {totalPages}\n            </span>\n            <IconButton\n              aria-label=\"Next page\"\n              size=\"small\"\n              variant=\"secondary\"\n              icon={<ChevronRight size={16} />}\n              disabled={safePage >= totalPages - 1}\n              onClick={() => setCurrentPage((p) => Math.min(totalPages - 1, p + 1))}\n            />\n          </div>\n        )}\n      </div>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\n\nexport const TagBlockSchema = z.object({\n  tags: z.array(z.string()),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { Tag as OpenUITag } from \"../../components/Tag\";\nimport { TagBlock as OpenUITagBlock } from \"../../components/TagBlock\";\nimport { asArray } from \"../helpers\";\nimport { TagBlockSchema } from \"./schema\";\n\nexport * from \"./schema\";\n\nexport const TagBlock = defineComponent({\n  name: \"TagBlock\",\n  props: TagBlockSchema,\n  description: \"tags is an array of strings\",\n  component: ({ props }) => {\n    const tags = asArray(props.tags) as string[];\n    return (\n      <OpenUITagBlock>\n        {tags.map((tag, i) => (\n          <OpenUITag key={i} text={tag} />\n        ))}\n      </OpenUITagBlock>\n    );\n  },\n});\n","import { tagSchemaId } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\n\n/** Shared action prop schema — shows as `ActionExpression` in prompt signatures. */\nexport const actionPropSchema = z.any();\ntagSchemaId(actionPropSchema, \"ActionExpression\");\n","import { z } from \"zod/v4\";\nimport { actionPropSchema } from \"../Action/schema\";\n\nexport const ButtonSchema = z.object({\n  label: z.string(),\n  action: actionPropSchema.optional(),\n  variant: z.enum([\"primary\", \"secondary\", \"tertiary\"]).optional(),\n  type: z.enum([\"normal\", \"destructive\"]).optional(),\n  size: z.enum([\"extra-small\", \"small\", \"medium\", \"large\"]).optional(),\n});\n","\"use client\";\n\nimport type { ActionPlan } from \"@openuidev/react-lang\";\nimport {\n  ACTION_STEPS,\n  defineComponent,\n  useFormName,\n  useFormValidation,\n  useIsStreaming,\n  useTriggerAction,\n} from \"@openuidev/react-lang\";\nimport { Button as OpenUIButton } from \"../../components/Button\";\nimport { ButtonSchema } from \"./schema\";\n\nexport { ButtonSchema } from \"./schema\";\n\nconst variantMap: Record<string, \"primary\" | \"secondary\" | \"tertiary\"> = {\n  primary: \"primary\",\n  secondary: \"secondary\",\n  ghost: \"tertiary\",\n  tertiary: \"tertiary\",\n};\n\nexport const Button = defineComponent({\n  name: \"Button\",\n  props: ButtonSchema,\n  description: \"Clickable button\",\n  component: ({ props }) => {\n    const triggerAction = useTriggerAction();\n    const formName = useFormName();\n    const isStreaming = useIsStreaming();\n    const formValidation = useFormValidation();\n    const label = props.label as string;\n\n    return (\n      <OpenUIButton\n        variant={variantMap[props.variant as string] || \"primary\"}\n        size={(props.size as \"extra-small\" | \"small\" | \"medium\" | \"large\") || \"medium\"}\n        buttonType={props.type as \"normal\" | \"destructive\"}\n        disabled={isStreaming}\n        onClick={() => {\n          const action = props.action as ActionPlan | undefined;\n          const variant = (props.variant as string) || \"primary\";\n\n          // Validate form for primary buttons before firing action\n          if (formValidation && variant === \"primary\") {\n            if (action?.steps) {\n              // v0.5 ActionPlan — validate if any step is ToAssistant or mutation\n              const needsValidation = action.steps.some(\n                (s) =>\n                  s.type === ACTION_STEPS.ToAssistant ||\n                  (s.type === ACTION_STEPS.Run && s.refType === \"mutation\"),\n              );\n              if (needsValidation && !formValidation.validateForm()) return;\n            } else {\n              // v0.1 legacy or no action — always validate for primary buttons\n              if (!formValidation.validateForm()) return;\n            }\n          }\n\n          triggerAction(label, formName, action);\n        }}\n      >\n        {label}\n      </OpenUIButton>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\nimport { Button } from \"../Button\";\n\nexport const ButtonsSchema = z.object({\n  buttons: z.array(Button.ref),\n  direction: z.enum([\"row\", \"column\"]).optional(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { Buttons as OpenUIButtons, type ButtonsProps } from \"../../components/Buttons\";\nimport { ButtonsSchema } from \"./schema\";\n\nexport { ButtonsSchema } from \"./schema\";\n\nconst directionToVariant: Record<string, \"horizontal\" | \"vertical\"> = {\n  row: \"horizontal\",\n  column: \"vertical\",\n};\n\nexport const Buttons = defineComponent({\n  name: \"Buttons\",\n  props: ButtonsSchema,\n  description: 'Group of Button components. direction: \"row\" (default) | \"column\".',\n  component: ({ props, renderNode }) => (\n    <OpenUIButtons variant={directionToVariant[props.direction as string] ?? \"horizontal\"}>\n      {renderNode(props.buttons) as ButtonsProps[\"children\"]}\n    </OpenUIButtons>\n  ),\n});\n","import { z } from \"zod/v4\";\n\n/**\n * Structured validation rules for form field components.\n * Example: { required: true, email: true, minLength: 5, max: 100 }\n * Available keys: required, email, url, numeric, min (number), max (number), minLength (number), maxLength (number), pattern (regex string)\n */\nexport const rulesSchema = z\n  .object({\n    required: z.boolean().optional(),\n    email: z.boolean().optional(),\n    url: z.boolean().optional(),\n    numeric: z.boolean().optional(),\n    min: z.number().optional(),\n    max: z.number().optional(),\n    minLength: z.number().optional(),\n    maxLength: z.number().optional(),\n    pattern: z.string().optional(),\n  })\n  .optional();\n\nexport type RulesSchema = z.infer<typeof rulesSchema>;\n","import { reactive } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { rulesSchema } from \"../rules\";\n\ntype RefComponent = { ref: any };\n\nexport const CheckBoxItemSchema = z.object({\n  label: z.string(),\n  description: z.string(),\n  name: z.string(),\n  defaultChecked: z.boolean().optional(),\n});\n\nexport function createCheckBoxGroupSchema(CheckBoxItem: RefComponent) {\n  return z.object({\n    name: z.string(),\n    items: z.array(CheckBoxItem.ref),\n    rules: rulesSchema,\n    value: reactive(z.record(z.string(), z.boolean()).optional()),\n  });\n}\n","\"use client\";\n\nimport {\n  defineComponent,\n  parseStructuredRules,\n  useFormValidation,\n  useIsStreaming,\n  useStateField,\n  type SubComponentOf,\n} from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { CheckBoxGroup as OpenUICheckBoxGroup } from \"../../components/CheckBoxGroup\";\nimport { CheckBoxItem as OpenUICheckBoxItem } from \"../../components/CheckBoxItem\";\nimport { CheckBoxItemSchema, createCheckBoxGroupSchema } from \"./schema\";\n\nexport { CheckBoxItemSchema } from \"./schema\";\n\ntype CheckBoxItemProps = {\n  name: string;\n  label: string;\n  description: string;\n  defaultChecked?: boolean;\n};\n\nexport const CheckBoxItem = defineComponent({\n  name: \"CheckBoxItem\",\n  props: CheckBoxItemSchema,\n  description: \"\",\n  component: () => null,\n});\n\nexport const CheckBoxGroup = defineComponent({\n  name: \"CheckBoxGroup\",\n  props: createCheckBoxGroupSchema(CheckBoxItem),\n  description: \"\",\n  component: ({ props }) => {\n    const isStreaming = useIsStreaming();\n    const formValidation = useFormValidation();\n\n    const field = useStateField(props.name, props.value);\n    const rules = React.useMemo(() => parseStructuredRules(props.rules), [props.rules]);\n    const hasRules = rules.length > 0;\n    const items = (props.items ?? []) as Array<SubComponentOf<CheckBoxItemProps>>;\n\n    // Aggregate: map of item name → checked boolean\n    const getAggregate = React.useCallback((): Record<string, boolean> => {\n      const stored = field.value;\n      const result: Record<string, boolean> = {};\n      for (const item of items) {\n        result[item.props.name] = stored?.[item.props.name] ?? item.props.defaultChecked ?? false;\n      }\n      return result;\n    }, [field.value, items]);\n\n    React.useEffect(() => {\n      if (!isStreaming && hasRules && formValidation) {\n        formValidation.registerField(field.name, rules, () => field.value);\n        return () => formValidation.unregisterField(field.name);\n      }\n      return undefined;\n    }, [field.name, field.value, formValidation, hasRules, isStreaming, rules]);\n\n    if (!items.length) return null;\n\n    const aggregate = getAggregate();\n\n    return (\n      <OpenUICheckBoxGroup>\n        {items.map((item, i) => (\n          <OpenUICheckBoxItem\n            key={i}\n            name={item.props.name}\n            label={item.props.label}\n            description={item.props.description || \"\"}\n            checked={aggregate[item.props.name] ?? item.props.defaultChecked ?? false}\n            onChange={(val: boolean) => {\n              const newAggregate = { ...getAggregate(), [item.props.name]: val };\n              field.setValue(newAggregate);\n              if (hasRules) {\n                formValidation?.validateField(field.name, newAggregate, rules);\n              }\n            }}\n            disabled={isStreaming}\n          />\n        ))}\n      </OpenUICheckBoxGroup>\n    );\n  },\n});\n","import { reactive } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { rulesSchema } from \"../rules\";\n\nexport const DatePickerSchema = z.object({\n  name: z.string(),\n  mode: z.enum([\"single\", \"range\"]).optional(),\n  rules: rulesSchema,\n  value: reactive(z.unknown().optional()),\n});\n","\"use client\";\n\nimport {\n  defineComponent,\n  parseStructuredRules,\n  useFormValidation,\n  useIsStreaming,\n  useStateField,\n} from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { DatePicker as OpenUIDatePicker } from \"../../components/DatePicker\";\nimport { DatePickerSchema } from \"./schema\";\n\nexport { DatePickerSchema } from \"./schema\";\n\nexport const DatePicker = defineComponent({\n  name: \"DatePicker\",\n  props: DatePickerSchema,\n  description: \"\",\n  component: ({ props }) => {\n    const isStreaming = useIsStreaming();\n    const formValidation = useFormValidation();\n\n    const field = useStateField(props.name, props.value);\n    const mode = (props.mode as \"single\" | \"range\") || \"single\";\n    const rules = React.useMemo(() => parseStructuredRules(props.rules), [props.rules]);\n    const hasRules = rules.length > 0;\n\n    React.useEffect(() => {\n      if (!isStreaming && hasRules && formValidation) {\n        formValidation.registerField(field.name, rules, () => field.value);\n        return () => formValidation.unregisterField(field.name);\n      }\n      return undefined;\n    }, [field.name, field.value, formValidation, hasRules, isStreaming, rules]);\n\n    const handleChange = (val: unknown) => {\n      field.setValue(val);\n      if (hasRules) {\n        formValidation?.validateField(field.name, val, rules);\n      }\n    };\n\n    if (mode === \"range\") {\n      return (\n        <OpenUIDatePicker\n          mode=\"range\"\n          selectedRangeDates={field.value as any}\n          setSelectedRangeDates={handleChange}\n        />\n      );\n    }\n\n    return (\n      <OpenUIDatePicker\n        mode=\"single\"\n        selectedSingleDate={field.value as any}\n        setSelectedSingleDate={handleChange}\n      />\n    );\n  },\n});\n","import { reactive } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { rulesSchema } from \"../rules\";\n\nexport const InputSchema = z.object({\n  name: z.string(),\n  placeholder: z.string().optional(),\n  type: z.enum([\"text\", \"email\", \"password\", \"number\", \"url\"]).optional(),\n  rules: rulesSchema,\n  value: reactive(z.string().optional()),\n});\n","\"use client\";\n\nimport {\n  defineComponent,\n  parseStructuredRules,\n  useFormValidation,\n  useIsStreaming,\n  useStateField,\n} from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { Input as OpenUIInput } from \"../../components/Input\";\nimport { InputSchema } from \"./schema\";\n\nexport { InputSchema } from \"./schema\";\n\nexport const Input = defineComponent({\n  name: \"Input\",\n  props: InputSchema,\n  description: \"\",\n  component: ({ props }) => {\n    const isStreaming = useIsStreaming();\n    const formValidation = useFormValidation();\n\n    const field = useStateField(props.name, props.value);\n    const rules = React.useMemo(() => parseStructuredRules(props.rules), [props.rules]);\n    const hasRules = rules.length > 0;\n\n    React.useEffect(() => {\n      if (!isStreaming && hasRules && formValidation) {\n        formValidation.registerField(field.name, rules, () => field.value);\n        return () => formValidation.unregisterField(field.name);\n      }\n      return undefined;\n    }, [field.name, field.value, formValidation, hasRules, isStreaming, rules]);\n\n    return (\n      <OpenUIInput\n        id={field.name}\n        name={field.name}\n        placeholder={(props.placeholder as string) || \"\"}\n        type={(props.type as string) || \"text\"}\n        value={field.value ?? \"\"}\n        onFocus={() => formValidation?.clearFieldError(field.name)}\n        onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n          const val = e.target.value;\n          field.setValue(val);\n          if (hasRules) {\n            formValidation?.clearFieldError(field.name);\n          }\n        }}\n        onBlur={(e: React.FocusEvent<HTMLInputElement>) => {\n          if (hasRules) {\n            formValidation?.validateField(field.name, e.target.value, rules);\n          }\n        }}\n        disabled={isStreaming}\n      />\n    );\n  },\n});\n","import { z } from \"zod/v4\";\n\nexport const RadioItemSchema = z.object({\n  label: z.string(),\n  description: z.string(),\n  value: z.string(),\n});\n","\"use client\";\n\nimport {\n  defineComponent,\n  parseStructuredRules,\n  reactive,\n  useFormValidation,\n  useIsStreaming,\n  useStateField,\n} from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { RadioGroup as OpenUIRadioGroup } from \"../../components/RadioGroup\";\nimport { RadioItem as OpenUIRadioItem } from \"../../components/RadioItem\";\nimport { rulesSchema } from \"../rules\";\nimport { RadioItemSchema } from \"./schema\";\n\nexport { RadioItemSchema } from \"./schema\";\n\nexport const RadioItem = defineComponent({\n  name: \"RadioItem\",\n  props: RadioItemSchema,\n  description: \"\",\n  component: () => null,\n});\n\nexport const RadioGroup = defineComponent({\n  name: \"RadioGroup\",\n  props: z.object({\n    name: z.string(),\n    items: z.array(RadioItem.ref),\n    defaultValue: z.string().optional(),\n    rules: rulesSchema,\n    value: reactive(z.string().optional()),\n  }),\n  description: \"\",\n  component: ({ props }) => {\n    const isStreaming = useIsStreaming();\n    const formValidation = useFormValidation();\n\n    const field = useStateField(props.name, props.value);\n    const rules = React.useMemo(() => parseStructuredRules(props.rules), [props.rules]);\n    const hasRules = rules.length > 0;\n    const items = (props.items ?? []) as Array<{\n      props: { value: string; label?: string; description?: string };\n    }>;\n\n    const value = field.value ?? props.defaultValue;\n\n    React.useEffect(() => {\n      if (!isStreaming && hasRules && formValidation) {\n        formValidation.registerField(field.name, rules, () => field.value);\n        return () => formValidation.unregisterField(field.name);\n      }\n      return undefined;\n    }, [field.name, field.value, formValidation, hasRules, isStreaming, rules]);\n\n    if (!items.length) return null;\n\n    return (\n      <OpenUIRadioGroup\n        name={field.name}\n        value={value ?? \"\"}\n        onValueChange={(val: string) => {\n          field.setValue(val);\n          if (hasRules) {\n            formValidation?.validateField(field.name, val, rules);\n          }\n        }}\n        disabled={isStreaming}\n      >\n        {items.map((item, i) => (\n          <OpenUIRadioItem\n            key={i}\n            value={item.props.value}\n            label={item.props.label}\n            description={item.props.description || \"\"}\n          />\n        ))}\n      </OpenUIRadioGroup>\n    );\n  },\n});\n","import { reactive } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { rulesSchema } from \"../rules\";\n\ntype RefComponent = { ref: any };\n\nexport const SelectItemSchema = z.object({\n  value: z.string(),\n  label: z.string(),\n});\n\nexport function createSelectSchema(SelectItem: RefComponent) {\n  return z.object({\n    name: z.string(),\n    items: z.array(SelectItem.ref),\n    placeholder: z.string().optional(),\n    rules: rulesSchema,\n    value: reactive(z.string().optional()),\n    size: z.enum([\"small\", \"medium\", \"large\"]).optional(),\n  });\n}\n","\"use client\";\n\nimport {\n  defineComponent,\n  parseStructuredRules,\n  useFormValidation,\n  useIsStreaming,\n  useStateField,\n} from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport {\n  Select as OpenUISelect,\n  SelectContent as OpenUISelectContent,\n  SelectItem as OpenUISelectItem,\n  SelectTrigger as OpenUISelectTrigger,\n  SelectValue as OpenUISelectValue,\n} from \"../../components/Select\";\nimport { SelectItemSchema, createSelectSchema } from \"./schema\";\n\nexport { SelectItemSchema } from \"./schema\";\n\nexport const SelectItem = defineComponent({\n  name: \"SelectItem\",\n  props: SelectItemSchema,\n  description: \"Option for Select\",\n  component: () => null,\n});\n\nexport const Select = defineComponent({\n  name: \"Select\",\n  props: createSelectSchema(SelectItem),\n  description: \"\",\n  component: ({ props }) => {\n    const isStreaming = useIsStreaming();\n    const formValidation = useFormValidation();\n\n    const field = useStateField(props.name, props.value);\n\n    const rules = React.useMemo(() => parseStructuredRules(props.rules), [props.rules]);\n    const hasRules = rules.length > 0;\n    const items = (\n      (props.items ?? []) as Array<{ props: { value: string; label?: string } }>\n    ).filter((item) => item?.props?.value);\n\n    const value = field.value ?? \"\";\n\n    const handleChange = React.useCallback(\n      (val: string) => {\n        field.setValue(val);\n        if (hasRules) {\n          formValidation?.validateField(field.name, val, rules);\n        }\n      },\n      [field, formValidation, hasRules, rules],\n    );\n\n    React.useEffect(() => {\n      if (!isStreaming && hasRules && formValidation) {\n        formValidation.registerField(field.name, rules, () => field.value);\n        return () => formValidation.unregisterField(field.name);\n      }\n      return undefined;\n    }, [field.name, field.value, formValidation, hasRules, isStreaming, rules]);\n\n    return (\n      <OpenUISelect\n        name={field.name}\n        value={value}\n        onValueChange={handleChange}\n        disabled={isStreaming}\n        size={({ small: \"sm\", medium: \"md\", large: \"lg\" } as const)[props.size as string] ?? \"md\"}\n      >\n        <OpenUISelectTrigger>\n          <OpenUISelectValue placeholder={props.placeholder || \"Select...\"} />\n        </OpenUISelectTrigger>\n        <OpenUISelectContent>\n          {items.map((item, i) => (\n            <OpenUISelectItem key={i} value={item.props.value}>\n              {item.props.label || item.props.value}\n            </OpenUISelectItem>\n          ))}\n        </OpenUISelectContent>\n      </OpenUISelect>\n    );\n  },\n});\n","import { reactive } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { rulesSchema } from \"../rules\";\n\nexport const SliderSchema = z.object({\n  name: z.string(),\n  variant: z.enum([\"continuous\", \"discrete\"]),\n  min: z.number(),\n  max: z.number(),\n  step: z.number().optional(),\n  defaultValue: z.array(z.number()).optional(),\n  label: z.string().optional(),\n  rules: rulesSchema,\n  value: reactive(z.array(z.number()).optional()),\n});\n","\"use client\";\n\nimport {\n  defineComponent,\n  parseStructuredRules,\n  useFormValidation,\n  useIsStreaming,\n  useStateField,\n} from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { SliderBlock as OpenUISliderBlock } from \"../../components/Slider\";\nimport { SliderSchema } from \"./schema\";\n\nexport { SliderSchema } from \"./schema\";\n\nexport const Slider = defineComponent({\n  name: \"Slider\",\n  props: SliderSchema,\n  description: \"Numeric slider input; supports continuous and discrete (stepped) variants\",\n  component: ({ props }) => {\n    const isStreaming = useIsStreaming();\n    const formValidation = useFormValidation();\n\n    const field = useStateField(props.name, props.value);\n    const rules = React.useMemo(() => parseStructuredRules(props.rules), [props.rules]);\n    const hasRules = rules.length > 0;\n    const value = field.value ?? props.defaultValue;\n\n    React.useEffect(() => {\n      if (!isStreaming && hasRules && formValidation) {\n        formValidation.registerField(field.name, rules, () => field.value);\n        return () => formValidation.unregisterField(field.name);\n      }\n      return undefined;\n    }, [field.name, field.value, formValidation, hasRules, isStreaming, rules]);\n\n    return (\n      <OpenUISliderBlock\n        label={(props.label as string) || field.name}\n        name={field.name}\n        variant={(props.variant as \"continuous\" | \"discrete\") || \"continuous\"}\n        min={props.min as number}\n        max={props.max as number}\n        step={props.step as number | undefined}\n        defaultValue={value != null ? (value as number[]) : undefined}\n        onValueCommit={(vals: number[]) => {\n          field.setValue(vals);\n          if (hasRules) {\n            formValidation?.validateField(field.name, vals[0], rules);\n          }\n        }}\n        disabled={isStreaming}\n      />\n    );\n  },\n});\n","import { reactive } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { rulesSchema } from \"../rules\";\n\nexport const TextAreaSchema = z.object({\n  name: z.string(),\n  placeholder: z.string().optional(),\n  rows: z.number().optional(),\n  rules: rulesSchema,\n  value: reactive(z.string().optional()),\n});\n","\"use client\";\n\nimport {\n  defineComponent,\n  parseStructuredRules,\n  useFormValidation,\n  useIsStreaming,\n  useStateField,\n} from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { TextArea as OpenUITextArea } from \"../../components/TextArea\";\nimport { TextAreaSchema } from \"./schema\";\n\nexport { TextAreaSchema } from \"./schema\";\n\nexport const TextArea = defineComponent({\n  name: \"TextArea\",\n  props: TextAreaSchema,\n  description: \"\",\n  component: ({ props }) => {\n    const isStreaming = useIsStreaming();\n    const formValidation = useFormValidation();\n\n    const field = useStateField(props.name, props.value);\n    const rules = React.useMemo(() => parseStructuredRules(props.rules), [props.rules]);\n    const hasRules = rules.length > 0;\n\n    React.useEffect(() => {\n      if (!isStreaming && hasRules && formValidation) {\n        formValidation.registerField(field.name, rules, () => field.value);\n        return () => formValidation.unregisterField(field.name);\n      }\n      return undefined;\n    }, [field.name, field.value, formValidation, hasRules, isStreaming, rules]);\n\n    return (\n      <OpenUITextArea\n        name={field.name}\n        placeholder={(props.placeholder as string) || \"\"}\n        rows={(props.rows as number) || 3}\n        value={field.value ?? \"\"}\n        onFocus={() => formValidation?.clearFieldError(field.name)}\n        onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n          const val = e.target.value;\n          field.setValue(val);\n          if (hasRules) {\n            formValidation?.clearFieldError(field.name);\n          }\n        }}\n        onBlur={(e: React.FocusEvent<HTMLTextAreaElement>) => {\n          if (hasRules) {\n            formValidation?.validateField(field.name, e.target.value, rules);\n          }\n        }}\n        disabled={isStreaming}\n      />\n    );\n  },\n});\n","import { z } from \"zod/v4\";\nimport { CheckBoxGroup } from \"../CheckBoxGroup\";\nimport { DatePicker } from \"../DatePicker\";\nimport { Input } from \"../Input\";\nimport { RadioGroup } from \"../RadioGroup\";\nimport { Select } from \"../Select\";\nimport { Slider } from \"../Slider\";\nimport { TextArea } from \"../TextArea\";\n\nexport const FormControlSchema = z.object({\n  label: z.string(),\n  input: z.union([\n    Input.ref,\n    TextArea.ref,\n    Select.ref,\n    DatePicker.ref,\n    Slider.ref,\n    CheckBoxGroup.ref,\n    RadioGroup.ref,\n  ]),\n  hint: z.string().optional(),\n});\n","\"use client\";\n\nimport { defineComponent, useFormValidation } from \"@openuidev/react-lang\";\nimport { AlertCircle } from \"lucide-react\";\nimport { FormControl as OpenUIFormControl } from \"../../components/FormControl\";\nimport { Hint as OpenUIHint } from \"../../components/FormControl/Hint\";\nimport { Label as OpenUILabel } from \"../../components/Label\";\nimport { FormControlSchema } from \"./schema\";\n\nexport { FormControlSchema } from \"./schema\";\n\nexport const FormControl = defineComponent({\n  name: \"FormControl\",\n  props: FormControlSchema,\n  description: \"Field with label, input component, and optional hint text\",\n  component: ({ props, renderNode }) => {\n    const formValidation = useFormValidation();\n    const inputObj = props.input as any;\n    // Extract the field name from the rendered input element props.\n    const rawName = inputObj?.type === \"element\" ? inputObj.props?.name : undefined;\n    const fieldName =\n      typeof rawName === \"object\" && rawName?.name ? rawName.name : (rawName as string | undefined);\n    const error = fieldName ? formValidation?.errors[fieldName] : undefined;\n    const isRequired = inputObj?.type === \"element\" && inputObj.props?.rules?.required === true;\n\n    return (\n      <OpenUIFormControl>\n        <OpenUILabel className=\"text-sm font-medium\" required={isRequired} htmlFor={fieldName}>\n          {props.label as string}\n        </OpenUILabel>\n        {renderNode(props.input)}\n        {error ? (\n          <OpenUIHint hasError={true}>\n            <AlertCircle size={14} />\n            {error}\n          </OpenUIHint>\n        ) : props.hint ? (\n          <OpenUIHint>{props.hint as string}</OpenUIHint>\n        ) : null}\n      </OpenUIFormControl>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\nimport { Buttons } from \"../Buttons\";\nimport { FormControl } from \"../FormControl\";\n\nexport const FormSchema = z.object({\n  name: z.string(),\n  buttons: Buttons.ref,\n  fields: z.array(FormControl.ref).default([]),\n});\n","\"use client\";\n\nimport {\n  defineComponent,\n  FormNameContext,\n  FormValidationContext,\n  useCreateFormValidation,\n} from \"@openuidev/react-lang\";\nimport { FormSchema } from \"./schema\";\n\nexport { FormSchema } from \"./schema\";\n\nexport const Form = defineComponent({\n  name: \"Form\",\n  props: FormSchema,\n  description: \"Form container with fields and explicit action buttons\",\n  component: ({ props, renderNode }) => {\n    const formValidation = useCreateFormValidation();\n    const formName = props.name as string;\n\n    return (\n      <FormValidationContext.Provider value={formValidation}>\n        <FormNameContext.Provider value={formName}>\n          <div role=\"form\" style={{ display: \"flex\", flexDirection: \"column\", gap: \"16px\" }}>\n            {renderNode(props.fields)}\n            {renderNode(props.buttons)}\n          </div>\n        </FormNameContext.Provider>\n      </FormValidationContext.Provider>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\n\nexport const StepsItemSchema = z.object({\n  title: z.string(),\n  details: z.string(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { MarkDownRenderer } from \"../../components/MarkDownRenderer\";\nimport { Steps as OpenUISteps, StepsItem as OpenUIStepsItem } from \"../../components/Steps\";\nimport { StepsItemSchema } from \"./schema\";\n\nexport { StepsItemSchema } from \"./schema\";\n\nexport const StepsItem = defineComponent({\n  name: \"StepsItem\",\n  props: StepsItemSchema,\n  description: \"title and details text for one step\",\n  component: () => null,\n});\n\nexport const Steps = defineComponent({\n  name: \"Steps\",\n  props: z.object({\n    items: z.array(StepsItem.ref),\n  }),\n  description: \"Step-by-step guide\",\n  component: ({ props, renderNode }) => {\n    const items = props.items ?? [];\n    return (\n      <OpenUISteps>\n        {items.map((item, i) => {\n          const details = item.props.details;\n          const detailsContent =\n            typeof details === \"string\" ? (\n              <MarkDownRenderer textMarkdown={details} />\n            ) : (\n              (renderNode(details) as React.ReactElement)\n            );\n\n          return (\n            <OpenUIStepsItem\n              key={i}\n              number={i + 1}\n              title={item.props.title}\n              details={detailsContent}\n            />\n          );\n        })}\n      </OpenUISteps>\n    );\n  },\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\n\nexport const FollowUpItem = defineComponent({\n  name: \"FollowUpItem\",\n  props: z.object({\n    text: z.string(),\n  }),\n  description: \"Clickable follow-up suggestion — when clicked, sends text as user message\",\n  component: () => null,\n});\n","\"use client\";\n\nimport { defineComponent, useTriggerAction } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { FollowUpBlock as OpenUIFollowUpBlock } from \"../../components/FollowUpBlock\";\nimport { FollowUpItem as OpenUIFollowUpItem } from \"../../components/FollowUpItem\";\nimport { FollowUpItem } from \"../FollowUpItem\";\n\nexport const FollowUpBlock = defineComponent({\n  name: \"FollowUpBlock\",\n  props: z.object({\n    items: z.array(FollowUpItem.ref),\n  }),\n  description: \"List of clickable follow-up suggestions placed at the end of a response\",\n  component: ({ props }) => {\n    const triggerAction = useTriggerAction();\n    const items = (props.items ?? []) as any[];\n\n    return (\n      <OpenUIFollowUpBlock>\n        {items.map((item, i) => {\n          const text = String(item?.props?.text ?? \"\");\n          return <OpenUIFollowUpItem key={i} text={text} onClick={() => triggerAction(text)} />;\n        })}\n      </OpenUIFollowUpBlock>\n    );\n  },\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { actionPropSchema } from \"../Action/schema\";\n\nexport const ListItem = defineComponent({\n  name: \"ListItem\",\n  props: z.object({\n    title: z.string(),\n    subtitle: z.string().optional(),\n    image: z\n      .object({\n        src: z.string(),\n        alt: z.string(),\n      })\n      .optional(),\n    actionLabel: z.string().optional(),\n    action: actionPropSchema.optional(),\n  }),\n  description:\n    \"Item in a ListBlock — displays a title with an optional subtitle and image. When action is provided, the item becomes clickable.\",\n  component: () => null,\n});\n","\"use client\";\n\nimport type { ActionPlan } from \"@openuidev/react-lang\";\nimport { defineComponent, useTriggerAction } from \"@openuidev/react-lang\";\nimport { ChevronRight } from \"lucide-react\";\nimport { z } from \"zod/v4\";\nimport { ListBlock as OpenUIListBlock } from \"../../components/ListBlock\";\nimport { ListItem as OpenUIListItem } from \"../../components/ListItem\";\nimport { ListItem } from \"../ListItem\";\n\nexport const ListBlock = defineComponent({\n  name: \"ListBlock\",\n  props: z.object({\n    items: z.array(ListItem.ref),\n    variant: z.enum([\"number\", \"image\"]).optional(),\n  }),\n  description:\n    \"A list of items with number or image indicators. Each item can optionally have an action.\",\n  component: ({ props }) => {\n    const triggerAction = useTriggerAction();\n    const items = (props.items ?? []) as any[];\n    const variant = (props.variant as \"number\" | \"image\") ?? \"number\";\n    const listHasSubtitle = items.some((item) => !!item?.props?.subtitle);\n\n    return (\n      <OpenUIListBlock variant={variant}>\n        {items.map((item, index) => {\n          const title = String(item?.props?.title ?? \"\");\n          const subtitle = item?.props?.subtitle ? String(item.props.subtitle) : undefined;\n          const image = item?.props?.image as { src: string; alt: string } | undefined;\n          const actionLabel = item?.props?.actionLabel ? String(item.props.actionLabel) : undefined;\n          const action = item?.props?.action;\n          const hasAction = !!action;\n\n          const handleClick = hasAction\n            ? () => triggerAction(title, undefined, action as ActionPlan | undefined)\n            : undefined;\n\n          return (\n            <OpenUIListItem\n              key={index}\n              title={title}\n              subtitle={subtitle}\n              listHasSubtitle={listHasSubtitle}\n              image={variant === \"image\" ? image : undefined}\n              actionLabel={hasAction ? actionLabel : undefined}\n              actionIcon={hasAction ? <ChevronRight size={16} /> : undefined}\n              onClick={handleClick}\n            />\n          );\n        })}\n      </OpenUIListBlock>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\n\nimport { Callout } from \"./Callout\";\nimport { CardHeader } from \"./CardHeader\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport { Image } from \"./Image\";\nimport { ImageBlock } from \"./ImageBlock\";\nimport { ImageGallery } from \"./ImageGallery\";\nimport { MarkDownRenderer } from \"./MarkDownRenderer\";\nimport { Separator } from \"./Separator\";\nimport { TextCallout } from \"./TextCallout\";\nimport { TextContent } from \"./TextContent\";\n\nimport {\n  AreaChartCondensed,\n  BarChartCondensed,\n  HorizontalBarChart,\n  LineChartCondensed,\n  PieChart,\n  RadarChart,\n  RadialChart,\n  ScatterChart,\n  SingleStackedBarChart,\n} from \"./Charts\";\n\nimport { Buttons } from \"./Buttons\";\nimport { FollowUpBlock } from \"./FollowUpBlock\";\nimport { Form } from \"./Form\";\nimport { ListBlock } from \"./ListBlock\";\nimport { Steps } from \"./Steps\";\nimport { Table } from \"./Table\";\nimport { TagBlock } from \"./TagBlock\";\n\n// Content allowed inside a SectionBlock section.\n// Does NOT include SectionBlock (no nesting), Tabs, or Accordion (avoids circular deps).\nexport const SectionContentChildUnion = z.union([\n  TextContent.ref,\n  MarkDownRenderer.ref,\n  CardHeader.ref,\n  Callout.ref,\n  TextCallout.ref,\n  CodeBlock.ref,\n  Image.ref,\n  ImageBlock.ref,\n  ImageGallery.ref,\n  Separator.ref,\n  HorizontalBarChart.ref,\n  RadarChart.ref,\n  PieChart.ref,\n  RadialChart.ref,\n  SingleStackedBarChart.ref,\n  ScatterChart.ref,\n  AreaChartCondensed.ref,\n  BarChartCondensed.ref,\n  LineChartCondensed.ref,\n  Table.ref,\n  TagBlock.ref,\n  Form.ref,\n  Buttons.ref,\n  Steps.ref,\n  ListBlock.ref,\n  FollowUpBlock.ref,\n]);\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { SectionContentChildUnion } from \"../sectionContentUnion\";\n\nexport const SectionItem = defineComponent({\n  name: \"SectionItem\",\n  props: z.object({\n    value: z.string(),\n    trigger: z.string(),\n    content: z.array(SectionContentChildUnion),\n  }),\n  description: \"Section with a label and collapsible content — used inside SectionBlock\",\n  component: () => null,\n});\n","\"use client\";\n\nimport { defineComponent, useIsStreaming } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport {\n  FoldableSectionContent,\n  FoldableSectionItem,\n  FoldableSectionRoot,\n  FoldableSectionTrigger,\n} from \"../../components/SectionBlock/FoldableSection\";\nimport { SectionV2 } from \"../../components/SectionBlock/SectionV2\";\nimport { SectionItem } from \"../SectionItem\";\n\nexport const SectionBlock = defineComponent({\n  name: \"SectionBlock\",\n  props: z.object({\n    sections: z.array(SectionItem.ref),\n    isFoldable: z.boolean().optional(),\n  }),\n  description:\n    \"Collapsible accordion sections. Auto-opens sections as they stream in. Use SectionItem for each section.\",\n  component: ({ props, renderNode }) => {\n    const items = (props.sections ?? []) as any[];\n    const isFoldable = props.isFoldable !== false;\n    const isStreaming = useIsStreaming();\n\n    const firstItemValue = items[0]?.props?.value as string | undefined;\n\n    const [openItems, setOpenItems] = React.useState<string[]>([]);\n    const userSelected = React.useRef(false);\n    const prevLengthRef = React.useRef(0);\n    const prevIsStreaming = React.useRef(isStreaming);\n\n    // During streaming: auto-open each new section as it arrives\n    React.useEffect(() => {\n      if (items.length === 0) return;\n\n      if (isStreaming && items.length > prevLengthRef.current && !userSelected.current) {\n        const last = items[items.length - 1];\n        const lastValue = last?.props?.value as string | undefined;\n        if (lastValue) {\n          setOpenItems((prev) => (prev.includes(lastValue) ? prev : [...prev, lastValue]));\n        }\n      } else {\n        setOpenItems((prev) => (prev.length === 0 && firstItemValue ? [firstItemValue] : prev));\n      }\n\n      prevLengthRef.current = items.length;\n    }, [items.length, isStreaming, firstItemValue]);\n\n    // When streaming ends: collapse back to first item (unless user interacted)\n    React.useEffect(() => {\n      if (prevIsStreaming.current && !isStreaming && !userSelected.current && items.length > 0) {\n        setOpenItems(firstItemValue ? [firstItemValue] : []);\n      }\n      prevIsStreaming.current = isStreaming;\n    }, [isStreaming]);\n\n    const handleValueChange = React.useCallback((value: string[] | undefined) => {\n      userSelected.current = true;\n      setOpenItems(value ?? []);\n    }, []);\n\n    if (!isFoldable) {\n      return (\n        <>\n          {items.map((item, index) => (\n            <SectionV2 key={index} trigger={String(item?.props?.trigger ?? \"\")}>\n              {renderNode(item?.props?.content)}\n            </SectionV2>\n          ))}\n        </>\n      );\n    }\n\n    return (\n      <FoldableSectionRoot type=\"multiple\" value={openItems} onValueChange={handleValueChange}>\n        {items.map((item, index) => (\n          <FoldableSectionItem key={index} value={String(item?.props?.value ?? index)}>\n            <FoldableSectionTrigger text={String(item?.props?.trigger ?? \"\")} />\n            <FoldableSectionContent>{renderNode(item?.props?.content)}</FoldableSectionContent>\n          </FoldableSectionItem>\n        ))}\n      </FoldableSectionRoot>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\n\nimport { Callout } from \"./Callout\";\nimport { CardHeader } from \"./CardHeader\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport { Image } from \"./Image\";\nimport { ImageBlock } from \"./ImageBlock\";\nimport { ImageGallery } from \"./ImageGallery\";\nimport { MarkDownRenderer } from \"./MarkDownRenderer\";\nimport { Separator } from \"./Separator\";\nimport { TextCallout } from \"./TextCallout\";\nimport { TextContent } from \"./TextContent\";\n\nimport {\n  AreaChartCondensed,\n  BarChartCondensed,\n  HorizontalBarChart,\n  LineChartCondensed,\n  PieChart,\n  RadarChart,\n  RadialChart,\n  ScatterChart,\n  SingleStackedBarChart,\n} from \"./Charts\";\n\nimport { Table } from \"./Table\";\nimport { TagBlock } from \"./TagBlock\";\n\nimport { Buttons } from \"./Buttons\";\nimport { Form } from \"./Form\";\n\nimport { Steps } from \"./Steps\";\n\nimport { FollowUpBlock } from \"./FollowUpBlock\";\nimport { ListBlock } from \"./ListBlock\";\nimport { SectionBlock } from \"./SectionBlock\";\n\nexport const ContentChildUnion = z.union([\n  TextContent.ref,\n  MarkDownRenderer.ref,\n  CardHeader.ref,\n  Callout.ref,\n  TextCallout.ref,\n  CodeBlock.ref,\n  Image.ref,\n  ImageBlock.ref,\n  ImageGallery.ref,\n  Separator.ref,\n  HorizontalBarChart.ref,\n  RadarChart.ref,\n  PieChart.ref,\n  RadialChart.ref,\n  SingleStackedBarChart.ref,\n  ScatterChart.ref,\n  AreaChartCondensed.ref,\n  BarChartCondensed.ref,\n  LineChartCondensed.ref,\n  Table.ref,\n  TagBlock.ref,\n  Form.ref,\n  Buttons.ref,\n  Steps.ref,\n]);\n\n// Chat-specific content union — no Stack, adds ListBlock / FollowUpBlock / SectionBlock\n// Note: Tabs and Carousel are NOT included here to avoid circular deps (Tabs/schema.ts imports ContentChildUnion).\n// ChatCardChildUnion (which adds Tabs + Carousel) is defined in openuiChatLibrary.tsx.\nexport const ChatContentChildUnion = z.union([\n  ...ContentChildUnion.options,\n  ListBlock.ref,\n  FollowUpBlock.ref,\n  SectionBlock.ref,\n]);\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { z } from \"zod/v4\";\nimport {\n  Carousel as OpenUICarousel,\n  CarouselContent as OpenUICarouselContent,\n  CarouselItem as OpenUICarouselItem,\n  CarouselNext as OpenUICarouselNext,\n  CarouselPrevious as OpenUICarouselPrevious,\n} from \"../../components/Carousel\";\nimport { ContentChildUnion } from \"../unions\";\n\nexport const Carousel = defineComponent({\n  name: \"Carousel\",\n  props: z.object({\n    children: z.array(z.array(ContentChildUnion)),\n    variant: z.enum([\"card\", \"sunk\"]).optional(),\n  }),\n  description: \"Horizontal scrollable carousel\",\n  component: ({ props, renderNode }) => {\n    const items = props.children ?? [];\n    return (\n      <OpenUICarousel showButtons={true} variant={props.variant}>\n        <OpenUICarouselContent>\n          {items.map((item, i) => (\n            <OpenUICarouselItem key={i}>{renderNode(item)}</OpenUICarouselItem>\n          ))}\n        </OpenUICarouselContent>\n        <OpenUICarouselPrevious icon={<ChevronLeft />} />\n        <OpenUICarouselNext icon={<ChevronRight />} />\n      </OpenUICarousel>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\n\nexport const FlexPropsSchema = z.object({\n  direction: z.enum([\"row\", \"column\"]).optional(),\n  gap: z.enum([\"none\", \"xs\", \"s\", \"m\", \"l\", \"xl\", \"2xl\"]).optional(),\n  align: z.enum([\"start\", \"center\", \"end\", \"stretch\", \"baseline\"]).optional(),\n  justify: z.enum([\"start\", \"center\", \"end\", \"between\", \"around\", \"evenly\"]).optional(),\n  wrap: z.boolean().optional(),\n});\n\nexport const StackSchema = z\n  .object({\n    children: z.array(z.any()),\n  })\n  .merge(FlexPropsSchema);\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { StackSchema } from \"./schema\";\n\nexport { StackSchema } from \"./schema\";\n\nconst gapMap: Record<string, string> = {\n  none: \"0\",\n  xs: \"var(--openui-space-xs)\",\n  s: \"var(--openui-space-s)\",\n  m: \"var(--openui-space-m)\",\n  l: \"var(--openui-space-l)\",\n  xl: \"var(--openui-space-xl)\",\n  \"2xl\": \"var(--openui-space-2xl)\",\n};\n\nconst alignMap: Record<string, string> = {\n  start: \"flex-start\",\n  center: \"center\",\n  end: \"flex-end\",\n  stretch: \"stretch\",\n  baseline: \"baseline\",\n};\n\nconst justifyMap: Record<string, string> = {\n  start: \"flex-start\",\n  center: \"center\",\n  end: \"flex-end\",\n  between: \"space-between\",\n  around: \"space-around\",\n  evenly: \"space-evenly\",\n};\n\nexport const Stack = defineComponent({\n  name: \"Stack\",\n  props: StackSchema,\n  description:\n    'Flex container. direction: \"row\"|\"column\" (default \"column\"). gap: \"none\"|\"xs\"|\"s\"|\"m\"|\"l\"|\"xl\"|\"2xl\" (default \"m\"). align: \"start\"|\"center\"|\"end\"|\"stretch\"|\"baseline\". justify: \"start\"|\"center\"|\"end\"|\"between\"|\"around\"|\"evenly\".',\n  component: ({ props, renderNode }) => {\n    const justify = props.wrap && props.justify === \"between\" ? \"start\" : (props.justify as string);\n    return (\n      <div\n        style={{\n          display: \"flex\",\n          flexDirection: ((props.direction as string) ?? \"column\") as \"row\" | \"column\",\n          gap: gapMap[(props.gap as string) || \"m\"] || gapMap[\"m\"],\n          alignItems: alignMap[props.align as string],\n          justifyContent: justifyMap[justify],\n          flexWrap: props.wrap ? \"wrap\" : undefined,\n        }}\n      >\n        {renderNode(props.children)}\n      </div>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\nimport { ContentChildUnion } from \"../unions\";\n\nexport const TabItemSchema = z.object({\n  value: z.string(),\n  trigger: z.string(),\n  content: z.array(ContentChildUnion),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport {\n  Tabs as OpenUITabs,\n  TabsContent as OpenUITabsContent,\n  TabsList as OpenUITabsList,\n  TabsTrigger as OpenUITabsTrigger,\n} from \"../../components/Tabs\";\nimport { TabItemSchema } from \"./schema\";\n\nexport { TabItemSchema } from \"./schema\";\n\nexport const TabItem = defineComponent({\n  name: \"TabItem\",\n  props: TabItemSchema,\n  description: \"value is unique id, trigger is tab label, content is array of components\",\n  component: () => null,\n});\n\nexport const Tabs = defineComponent({\n  name: \"Tabs\",\n  props: z.object({\n    items: z.array(TabItem.ref),\n  }),\n  description: \"Tabbed container\",\n  component: ({ props, renderNode }) => {\n    const items = (props.items ?? []).filter((item) => item?.props?.value != null);\n    const [activeTab, setActiveTab] = React.useState(\"\");\n    const userHasInteracted = React.useRef(false);\n    const prevContentSizes = React.useRef<Record<string, number>>({});\n\n    React.useEffect(() => {\n      const first = items[0];\n      if (items.length && !activeTab && first) {\n        setActiveTab(first.props.value);\n      }\n    }, [items.length, activeTab]);\n\n    React.useEffect(() => {\n      if (userHasInteracted.current) return;\n\n      let candidate: string | null = null;\n      const nextSizes: Record<string, number> = {};\n\n      for (const item of items) {\n        const size = JSON.stringify(item.props.content).length;\n        const prevSize = prevContentSizes.current[item.props.value] ?? 0;\n        nextSizes[item.props.value] = size;\n        if (size > prevSize) {\n          candidate = item.props.value;\n        }\n      }\n\n      prevContentSizes.current = nextSizes;\n\n      if (candidate && candidate !== activeTab) {\n        setActiveTab(candidate);\n      }\n    });\n\n    const handleValueChange = (value: string) => {\n      userHasInteracted.current = true;\n      setActiveTab(value);\n    };\n\n    if (!items.length) return null;\n\n    return (\n      <OpenUITabs value={activeTab} onValueChange={handleValueChange}>\n        <OpenUITabsList>\n          {items.map((item) => (\n            <OpenUITabsTrigger\n              key={item.props.value}\n              value={item.props.value}\n              text={item.props.trigger}\n            />\n          ))}\n        </OpenUITabsList>\n        {items.map((item) => (\n          <OpenUITabsContent key={item.props.value} value={item.props.value}>\n            {renderNode(item.props.content)}\n          </OpenUITabsContent>\n        ))}\n      </OpenUITabs>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\nimport { Carousel } from \"../Carousel\";\nimport { Stack } from \"../Stack\";\nimport { FlexPropsSchema } from \"../Stack/schema\";\nimport { Tabs } from \"../Tabs\";\nimport { ContentChildUnion } from \"../unions\";\n\nexport const CardChildUnion = z.union([\n  ...ContentChildUnion.options,\n  Tabs.ref,\n  Carousel.ref,\n  Stack.ref,\n]);\n\nexport const CardSchema = z\n  .object({\n    children: z.array(CardChildUnion),\n    variant: z.enum([\"card\", \"sunk\", \"clear\"]).optional(),\n  })\n  .merge(FlexPropsSchema);\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { Card as OpenUICard } from \"../../components/Card\";\nimport { CardSchema } from \"./schema\";\n\nexport { CardSchema } from \"./schema\";\n\nconst gapMap: Record<string, string> = {\n  none: \"0\",\n  xs: \"var(--openui-space-xs)\",\n  s: \"var(--openui-space-s)\",\n  m: \"var(--openui-space-m)\",\n  l: \"var(--openui-space-l)\",\n  xl: \"var(--openui-space-xl)\",\n  \"2xl\": \"var(--openui-space-2xl)\",\n};\n\nconst alignMap: Record<string, string> = {\n  start: \"flex-start\",\n  center: \"center\",\n  end: \"flex-end\",\n  stretch: \"stretch\",\n  baseline: \"baseline\",\n};\n\nconst justifyMap: Record<string, string> = {\n  start: \"flex-start\",\n  center: \"center\",\n  end: \"flex-end\",\n  between: \"space-between\",\n  around: \"space-around\",\n  evenly: \"space-evenly\",\n};\n\nexport const Card = defineComponent({\n  name: \"Card\",\n  props: CardSchema,\n  description:\n    'Styled container. variant: \"card\" (default, elevated) | \"sunk\" (recessed) | \"clear\" (transparent). Always full width. Accepts all Stack flex params (default: direction \"column\"). Cards flex to share space in row/wrap layouts.',\n  component: ({ props, renderNode }) => (\n    <OpenUICard\n      variant={(props.variant as \"card\" | \"sunk\" | \"clear\") ?? \"card\"}\n      width=\"full\"\n      style={{\n        flex: 1,\n        minWidth: 0,\n        display: \"flex\",\n        flexDirection: (props.direction as \"row\" | \"column\") || \"column\",\n        flexWrap: props.wrap ? \"wrap\" : \"nowrap\",\n        gap: gapMap[(props.gap as string) || \"m\"] || gapMap[\"m\"],\n        alignItems: alignMap[(props.align as string) || \"stretch\"] || \"stretch\",\n        justifyContent: justifyMap[(props.justify as string) || \"start\"] || \"flex-start\",\n      }}\n    >\n      {renderNode(props.children)}\n    </OpenUICard>\n  ),\n});\n","import { z } from \"zod/v4\";\n\nexport const LabelSchema = z.object({\n  text: z.string(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { Label as OpenUILabel } from \"../../components/Label\";\nimport { LabelSchema } from \"./schema\";\n\nexport { LabelSchema } from \"./schema\";\n\nexport const Label = defineComponent({\n  name: \"Label\",\n  props: LabelSchema,\n  description: \"Text label\",\n  component: ({ props }) => <OpenUILabel>{props.text as string}</OpenUILabel>,\n});\n","import { reactive } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\n\ntype RefComponent = { ref: any };\n\nexport const SwitchItemSchema = z.object({\n  label: z.string().optional(),\n  description: z.string().optional(),\n  name: z.string(),\n  defaultChecked: z.boolean().optional(),\n});\n\nexport function createSwitchGroupSchema(SwitchItem: RefComponent) {\n  return z.object({\n    name: z.string(),\n    items: z.array(SwitchItem.ref),\n    variant: z.enum([\"clear\", \"card\", \"sunk\"]).optional(),\n    value: reactive(z.record(z.string(), z.boolean()).optional()),\n  });\n}\n","\"use client\";\n\nimport {\n  defineComponent,\n  useIsStreaming,\n  useStateField,\n  type SubComponentOf,\n} from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { SwitchGroup as OpenUISwitchGroup } from \"../../components/SwitchGroup\";\nimport { SwitchItem as OpenUISwitchItem } from \"../../components/SwitchItem\";\nimport { SwitchItemSchema, createSwitchGroupSchema } from \"./schema\";\n\nexport { SwitchItemSchema } from \"./schema\";\n\ntype SwitchItemProps = {\n  name: string;\n  label?: string;\n  description?: string;\n  defaultChecked?: boolean;\n};\n\nexport const SwitchItem = defineComponent({\n  name: \"SwitchItem\",\n  props: SwitchItemSchema,\n  description: \"Individual switch toggle\",\n  component: () => null,\n});\n\nexport const SwitchGroup = defineComponent({\n  name: \"SwitchGroup\",\n  props: createSwitchGroupSchema(SwitchItem),\n  description: \"Group of switch toggles\",\n  component: ({ props }) => {\n    const isStreaming = useIsStreaming();\n\n    const field = useStateField(props.name, props.value);\n    const items = (props.items ?? []) as Array<SubComponentOf<SwitchItemProps>>;\n\n    // Aggregate: map of item name → checked boolean\n    const getAggregate = React.useCallback((): Record<string, boolean> => {\n      const stored = field.value;\n      const result: Record<string, boolean> = {};\n      for (const item of items) {\n        result[item.props.name] = stored?.[item.props.name] ?? item.props.defaultChecked ?? false;\n      }\n      return result;\n    }, [field.value, items]);\n\n    if (!items.length) return null;\n\n    const aggregate = getAggregate();\n\n    return (\n      <OpenUISwitchGroup variant={(props.variant as any) || \"clear\"}>\n        {items.map((item, i) => (\n          <OpenUISwitchItem\n            key={i}\n            name={item.props.name}\n            label={item.props.label}\n            description={item.props.description || \"\"}\n            checked={aggregate[item.props.name] ?? item.props.defaultChecked ?? false}\n            onChange={(val: boolean) => {\n              const newAggregate = { ...getAggregate(), [item.props.name]: val };\n              field.setValue(newAggregate);\n            }}\n            disabled={isStreaming}\n          />\n        ))}\n      </OpenUISwitchGroup>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\nimport { ContentChildUnion } from \"../unions\";\n\nexport const AccordionItemSchema = z.object({\n  value: z.string(),\n  trigger: z.string(),\n  content: z.array(ContentChildUnion),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport {\n  Accordion as OpenUIAccordion,\n  AccordionContent as OpenUIAccordionContent,\n  AccordionItem as OpenUIAccordionItem,\n  AccordionTrigger as OpenUIAccordionTrigger,\n} from \"../../components/Accordion\";\nimport { AccordionItemSchema } from \"./schema\";\n\nexport { AccordionItemSchema } from \"./schema\";\n\nexport const AccordionItem = defineComponent({\n  name: \"AccordionItem\",\n  props: AccordionItemSchema,\n  description: \"value is unique id, trigger is section title\",\n  component: () => null,\n});\n\nexport const Accordion = defineComponent({\n  name: \"Accordion\",\n  props: z.object({\n    items: z.array(AccordionItem.ref),\n  }),\n  description: \"Collapsible sections\",\n  component: ({ props, renderNode }) => {\n    const items = props.items ?? [];\n    const [openItem, setOpenItem] = React.useState<string>(\"\");\n    const userHasInteracted = React.useRef(false);\n    const prevItemCount = React.useRef(0);\n\n    // Auto-open: only when a NEW item arrives during streaming\n    if (!userHasInteracted.current && items.length > prevItemCount.current) {\n      const newest = items[items.length - 1];\n      if (newest) setOpenItem(newest.props.value);\n    }\n    prevItemCount.current = items.length;\n\n    const handleValueChange = (value: string) => {\n      userHasInteracted.current = true;\n      setOpenItem(value);\n    };\n\n    if (!items.length) return null;\n\n    return (\n      <OpenUIAccordion type=\"single\" collapsible value={openItem} onValueChange={handleValueChange}>\n        {items.map((item) => (\n          <OpenUIAccordionItem key={item.props.value} value={item.props.value}>\n            <OpenUIAccordionTrigger text={item.props.trigger} />\n            <OpenUIAccordionContent>{renderNode(item.props.content)}</OpenUIAccordionContent>\n          </OpenUIAccordionItem>\n        ))}\n      </OpenUIAccordion>\n    );\n  },\n});\n","import { z } from \"zod/v4\";\n\nexport const TagSchema = z.object({\n  text: z.string(),\n  icon: z.string().optional(),\n  size: z.enum([\"sm\", \"md\", \"lg\"]).optional(),\n  variant: z.enum([\"neutral\", \"info\", \"success\", \"warning\", \"danger\"]).optional(),\n});\n","\"use client\";\n\nimport { defineComponent } from \"@openuidev/react-lang\";\nimport { Tag as OpenUITag } from \"../../components/Tag\";\nimport { TagSchema } from \"./schema\";\n\nexport * from \"./schema\";\n\nexport const Tag = defineComponent({\n  name: \"Tag\",\n  props: TagSchema,\n  description: \"Styled tag/badge with optional icon and variant\",\n  component: ({ props }) => (\n    <OpenUITag\n      text={props.text as string}\n      size={props.size as \"sm\" | \"md\" | \"lg\" | undefined}\n      variant={props.variant as \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\" | undefined}\n    />\n  ),\n});\n","\"use client\";\n\nimport clsx from \"clsx\";\nimport { X } from \"lucide-react\";\nimport React, { useCallback, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useTheme } from \"../ThemeProvider\";\n\nexport interface ModalProps {\n  title: string;\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n  size?: \"sm\" | \"md\" | \"lg\";\n  children?: React.ReactNode;\n}\n\nconst sizeClass: Record<string, string> = {\n  sm: \"openui-modal-sm\",\n  md: \"openui-modal-md\",\n  lg: \"openui-modal-lg\",\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n  title,\n  open,\n  onOpenChange,\n  size = \"md\",\n  children,\n}) => {\n  const { portalThemeClassName } = useTheme();\n  const contentRef = useRef<HTMLDivElement>(null);\n\n  const handleClose = useCallback(() => onOpenChange(false), [onOpenChange]);\n\n  // Escape key\n  useEffect(() => {\n    if (!open) return;\n    const onKey = (e: KeyboardEvent) => {\n      if (e.key === \"Escape\") handleClose();\n    };\n    document.addEventListener(\"keydown\", onKey);\n    return () => document.removeEventListener(\"keydown\", onKey);\n  }, [open, handleClose]);\n\n  // Focus trap — focus the content on open\n  useEffect(() => {\n    if (open && contentRef.current) {\n      contentRef.current.focus();\n    }\n  }, [open]);\n\n  if (!open) return null;\n\n  return createPortal(\n    <div className={clsx(\"openui-modal-root\", portalThemeClassName)}>\n      <div className=\"openui-modal-overlay\" onClick={handleClose} />\n      <div\n        ref={contentRef}\n        className={clsx(\"openui-modal-content\", sizeClass[size])}\n        role=\"dialog\"\n        aria-modal=\"true\"\n        aria-labelledby=\"openui-modal-title\"\n        tabIndex={-1}\n      >\n        <div className=\"openui-modal-header\">\n          <h2 id=\"openui-modal-title\" className=\"openui-modal-title\">\n            {title}\n          </h2>\n          <button className=\"openui-modal-close\" aria-label=\"Close\" onClick={handleClose}>\n            <X size={18} />\n          </button>\n        </div>\n        <div className=\"openui-modal-body\">{children}</div>\n      </div>\n    </div>,\n    document.body,\n  );\n};\n","import { reactive } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { ContentChildUnion } from \"../unions\";\n\nexport const ModalSchema = z.object({\n  title: z.string(),\n  open: reactive(z.boolean().optional()),\n  children: z.array(ContentChildUnion),\n  size: z.enum([\"sm\", \"md\", \"lg\"]).optional(),\n});\n","\"use client\";\n\nimport { defineComponent, useStateField } from \"@openuidev/react-lang\";\nimport { Modal as OpenUIModal } from \"../../components/Modal\";\nimport { ModalSchema } from \"./schema\";\n\nexport { ModalSchema } from \"./schema\";\n\nexport const Modal = defineComponent({\n  name: \"Modal\",\n  props: ModalSchema,\n  description:\n    \"Modal dialog. open is a reactive $boolean binding — set to true to open, X/Escape/backdrop auto-closes. Put Form with buttons inside children.\",\n  component: ({ props, renderNode }) => {\n    const field = useStateField(\"open\", props.open);\n\n    const isOpen = field.value === true || (field.value as any) === \"true\";\n\n    const handleOpenChange = (open: boolean) => {\n      if (!open) {\n        field.setValue(false);\n      }\n    };\n\n    return (\n      <OpenUIModal\n        title={props.title as string}\n        open={isOpen}\n        onOpenChange={handleOpenChange}\n        size={(props.size as \"sm\" | \"md\" | \"lg\") ?? \"md\"}\n      >\n        {renderNode(props.children)}\n      </OpenUIModal>\n    );\n  },\n});\n","\"use client\";\n\nimport type { ComponentGroup, PromptOptions } from \"@openuidev/react-lang\";\nimport { createLibrary } from \"@openuidev/react-lang\";\n\n// Content\nimport { Callout } from \"./Callout\";\nimport { Card } from \"./Card\";\nimport { CardHeader } from \"./CardHeader\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport { Image } from \"./Image\";\nimport { ImageBlock } from \"./ImageBlock\";\nimport { ImageGallery } from \"./ImageGallery\";\nimport { MarkDownRenderer } from \"./MarkDownRenderer\";\nimport { TextCallout } from \"./TextCallout\";\nimport { TextContent } from \"./TextContent\";\n\n// Charts\nimport {\n  AreaChartCondensed,\n  BarChartCondensed,\n  HorizontalBarChart,\n  LineChartCondensed,\n  PieChart,\n  Point,\n  RadarChart,\n  RadialChart,\n  ScatterChart,\n  ScatterSeries,\n  Series,\n  SingleStackedBarChart,\n  Slice,\n} from \"./Charts\";\n\n// Forms\nimport { CheckBoxGroup, CheckBoxItem } from \"./CheckBoxGroup\";\nimport { DatePicker } from \"./DatePicker\";\nimport { Form } from \"./Form\";\nimport { FormControl } from \"./FormControl\";\nimport { Input } from \"./Input\";\nimport { Label } from \"./Label\";\nimport { RadioGroup, RadioItem } from \"./RadioGroup\";\nimport { Select, SelectItem } from \"./Select\";\nimport { Slider } from \"./Slider\";\nimport { SwitchGroup, SwitchItem } from \"./SwitchGroup\";\nimport { TextArea } from \"./TextArea\";\n\n// Buttons\nimport { Button } from \"./Button\";\nimport { Buttons } from \"./Buttons\";\n\n// Layout\nimport { Accordion, AccordionItem } from \"./Accordion\";\nimport { Carousel } from \"./Carousel\";\nimport { Separator } from \"./Separator\";\nimport { Stack } from \"./Stack\";\nimport { Steps, StepsItem } from \"./Steps\";\nimport { TabItem, Tabs } from \"./Tabs\";\n\n// Data Display\nimport { Col, Table } from \"./Table\";\nimport { Tag } from \"./Tag\";\nimport { TagBlock } from \"./TagBlock\";\n\n// Modal\nimport { Modal } from \"./Modal\";\n\n// ── Component Groups ──\n\nexport const openuiComponentGroups: ComponentGroup[] = [\n  {\n    name: \"Layout\",\n    components: [\n      \"Stack\",\n      \"Tabs\",\n      \"TabItem\",\n      \"Accordion\",\n      \"AccordionItem\",\n      \"Steps\",\n      \"StepsItem\",\n      \"Carousel\",\n      \"Separator\",\n      \"Modal\",\n    ],\n    notes: [\n      '- For grid-like layouts, use Stack with direction \"row\" and wrap set to true.',\n      '- Prefer justify \"start\" (or omit justify) with wrap=true for stable columns instead of uneven gutters.',\n      \"- Use nested Stacks when you need explicit rows/sections.\",\n      '- Show/hide sections: $editId != \"\" ? Card([editForm]) : null',\n      '- Modal: Modal(\"Title\", $showModal, [content]) — $showModal is boolean, X/Escape auto-closes. Put Form with its own buttons inside children.',\n      \"- Use Tabs for alternative views (chart types, data sections) — no $variable needed\",\n      \"- Shared filter across Tabs: same $days binding in Query args works across all TabItems\",\n    ],\n  },\n  {\n    name: \"Content\",\n    components: [\n      \"Card\",\n      \"CardHeader\",\n      \"TextContent\",\n      \"MarkDownRenderer\",\n      \"Callout\",\n      \"TextCallout\",\n      \"Image\",\n      \"ImageBlock\",\n      \"ImageGallery\",\n      \"CodeBlock\",\n    ],\n    notes: [\n      '- Use Cards to group related KPIs or sections. Stack with direction \"row\" for side-by-side layouts.',\n      '- Success toast: Callout(\"success\", \"Saved\", \"Done.\", $showSuccess) — use @Set($showSuccess, true) in save action, auto-dismisses after 3s. For errors: result.status == \"error\" ? Callout(\"error\", \"Failed\", result.error) : null',\n      '- KPI card: Card([TextContent(\"Label\", \"small\"), TextContent(\"\" + @Count(@Filter(data.rows, \"field\", \"==\", \"value\")), \"large-heavy\")])',\n    ],\n  },\n  {\n    name: \"Tables\",\n    components: [\"Table\", \"Col\"],\n    notes: [\n      '- Table is COLUMN-oriented: Table([Col(\"Label\", dataArray), Col(\"Count\", countArray, \"number\")]). Use array pluck for data: data.rows.fieldName',\n      '- Col data can be component arrays for styled cells: Col(\"Status\", @Each(data.rows, \"item\", Tag(item.status, null, \"sm\", item.status == \"open\" ? \"success\" : \"danger\")))',\n      '- Row actions: Col(\"Actions\", @Each(data.rows, \"t\", Button(\"Edit\", Action([@Set($showEdit, true), @Set($editId, t.id)]))))',\n      '- Sortable: sorted = @Sort(data.rows, $sortField, \"desc\"). Bind $sortField to Select. Use sorted.fieldName for Col data',\n      '- Searchable: filtered = @Filter(data.rows, \"title\", \"contains\", $search). Bind $search to Input',\n      \"- Chain sort + filter: filtered = @Filter(...) then sorted = @Sort(filtered, ...) — use sorted for both Table and Charts\",\n      '- Empty state: @Count(data.rows) > 0 ? Table([...]) : TextContent(\"No data yet\")',\n    ],\n  },\n  {\n    name: \"Charts (2D)\",\n    components: [\n      \"BarChart\",\n      \"LineChart\",\n      \"AreaChart\",\n      \"RadarChart\",\n      \"HorizontalBarChart\",\n      \"Series\",\n    ],\n    notes: [\n      '- Charts accept column arrays: LineChart(labels, [Series(\"Name\", values)]). Use array pluck: LineChart(data.rows.day, [Series(\"Views\", data.rows.views)])',\n      \"- Use Cards to wrap charts with CardHeader for titled sections\",\n      \"- Chart + Table from same source: use @Sort or @Filter result for both LineChart and Table Col data\",\n      '- Multiple chart views: use Tabs — Tabs([TabItem(\"line\", \"Line\", [LineChart(...)]), TabItem(\"bar\", \"Bar\", [BarChart(...)])])',\n    ],\n  },\n  {\n    name: \"Charts (1D)\",\n    components: [\"PieChart\", \"RadialChart\", \"SingleStackedBarChart\", \"Slice\"],\n    notes: [\n      \"- PieChart and BarChart need NUMBERS, not objects. For list data, use @Count(@Filter(...)) to aggregate:\",\n      '- PieChart from list: `PieChart([\"Low\", \"Med\", \"High\"], [@Count(@Filter(data.rows, \"priority\", \"==\", \"low\")), @Count(@Filter(data.rows, \"priority\", \"==\", \"medium\")), @Count(@Filter(data.rows, \"priority\", \"==\", \"high\"))], \"donut\")`',\n      '- KPI from count: `TextContent(\"\" + @Count(@Filter(data.rows, \"status\", \"==\", \"open\")), \"large-heavy\")`',\n    ],\n  },\n  {\n    name: \"Charts (Scatter)\",\n    components: [\"ScatterChart\", \"ScatterSeries\", \"Point\"],\n  },\n  {\n    name: \"Forms\",\n    components: [\n      \"Form\",\n      \"FormControl\",\n      \"Label\",\n      \"Input\",\n      \"TextArea\",\n      \"Select\",\n      \"SelectItem\",\n      \"DatePicker\",\n      \"Slider\",\n      \"CheckBoxGroup\",\n      \"CheckBoxItem\",\n      \"RadioGroup\",\n      \"RadioItem\",\n      \"SwitchGroup\",\n      \"SwitchItem\",\n    ],\n    notes: [\n      \"- For Form fields, define EACH FormControl as its own reference — do NOT inline all controls in one array. This allows progressive field-by-field streaming.\",\n      \"- NEVER nest Form inside Form — each Form should be a standalone container.\",\n      \"- Form requires explicit buttons. Always pass a Buttons(...) reference as the third Form argument.\",\n      \"- rules is an optional object: {required: true, email: true, minLength: 8, maxLength: 100}\",\n      \"- Available rules: required, email, min, max, minLength, maxLength, pattern, url, numeric\",\n      \"- The renderer shows error messages automatically — do NOT generate error text in the UI\",\n      '- Conditional fields: $country == \"US\" ? stateField : $country == \"UK\" ? postcodeField : addressField',\n      '- Edit form in Modal: Modal(\"Edit\", $showEdit, [Form(\"edit\", Buttons([saveBtn, cancelBtn]), [fields...])]). Save button should include @Set($showEdit, false) to close modal.',\n    ],\n  },\n  {\n    name: \"Buttons\",\n    components: [\"Button\", \"Buttons\"],\n    notes: [\n      '- Toggle in @Each: @Each(rows, \"t\", Button(t.status == \"open\" ? \"Close\" : \"Reopen\", Action([...])))',\n    ],\n  },\n  {\n    name: \"Data Display\",\n    components: [\"TagBlock\", \"Tag\"],\n    notes: [\n      '- Color-mapped Tag: Tag(value, null, \"sm\", value == \"high\" ? \"danger\" : value == \"medium\" ? \"warning\" : \"neutral\")',\n    ],\n  },\n];\n\n// ── Examples ──\n\nexport const openuiExamples: string[] = [\n  `Example 1 — Table (column-oriented):\n\nroot = Stack([title, tbl])\ntitle = TextContent(\"Top Languages\", \"large-heavy\")\ntbl = Table([Col(\"Language\", langs), Col(\"Users (M)\", users), Col(\"Year\", years)])\nlangs = [\"Python\", \"JavaScript\", \"Java\", \"TypeScript\", \"Go\"]\nusers = [15.7, 14.2, 12.1, 8.5, 5.2]\nyears = [1991, 1995, 1995, 2012, 2009]`,\n\n  `Example 2 — Bar chart:\n\nroot = Stack([title, chart])\ntitle = TextContent(\"Q4 Revenue\", \"large-heavy\")\nchart = BarChart(labels, [s1, s2], \"grouped\")\nlabels = [\"Oct\", \"Nov\", \"Dec\"]\ns1 = Series(\"Product A\", [120, 150, 180])\ns2 = Series(\"Product B\", [90, 110, 140])`,\n\n  `Example 3 — Form with validation:\n\nroot = Stack([title, form])\ntitle = TextContent(\"Contact Us\", \"large-heavy\")\nform = Form(\"contact\", btns, [nameField, emailField, countryField, msgField])\nnameField = FormControl(\"Name\", Input(\"name\", \"Your name\", \"text\", { required: true, minLength: 2 }))\nemailField = FormControl(\"Email\", Input(\"email\", \"you@example.com\", \"email\", { required: true, email: true }))\ncountryField = FormControl(\"Country\", Select(\"country\", countryOpts, \"Select...\", { required: true }))\nmsgField = FormControl(\"Message\", TextArea(\"message\", \"Tell us more...\", 4, { required: true, minLength: 10 }))\ncountryOpts = [SelectItem(\"us\", \"United States\"), SelectItem(\"uk\", \"United Kingdom\"), SelectItem(\"de\", \"Germany\")]\nbtns = Buttons([Button(\"Submit\", Action([@ToAssistant(\"Submit\")]), \"primary\"), Button(\"Cancel\", Action([@ToAssistant(\"Cancel\")]), \"secondary\")])`,\n\n  `Example 4 — Tabs with mixed content:\n\nroot = Stack([title, tabs])\ntitle = TextContent(\"React vs Vue\", \"large-heavy\")\ntabs = Tabs([tabReact, tabVue])\ntabReact = TabItem(\"react\", \"React\", reactContent)\ntabVue = TabItem(\"vue\", \"Vue\", vueContent)\nreactContent = [TextContent(\"React is a library by Meta for building UIs.\"), Callout(\"info\", \"Note\", \"React uses JSX syntax.\")]\nvueContent = [TextContent(\"Vue is a progressive framework by Evan You.\"), Callout(\"success\", \"Tip\", \"Vue has a gentle learning curve.\")]`,\n];\n\nexport const openuiAdditionalRules: string[] = [\n  'For grid-like layouts, use Stack with direction \"row\" and wrap=true. Avoid justify=\"between\" unless you specifically want large gutters.',\n  \"For forms, define one FormControl reference per field so controls can stream progressively.\",\n  \"For forms, always provide the second Form argument with Buttons(...) actions: Form(name, buttons, fields).\",\n  \"Never nest Form inside Form.\",\n  'Use @Reset($var1, $var2) after form submit to restore defaults — not @Set($var, \"\")',\n  \"Multi-query refresh: Action([@Run(mutation), @Run(query1), @Run(query2), @Reset(...)])\",\n  \"$variables are reactive: changing via Select or @Set re-evaluates all Queries and expressions referencing them\",\n  \"Use existing components (Tabs, Accordion, Modal) before inventing ternary show/hide patterns\",\n];\n\nexport const openuiPromptOptions: PromptOptions = {\n  examples: openuiExamples,\n  additionalRules: openuiAdditionalRules,\n};\n\n// ── Library ──\n\nexport const openuiLibrary = createLibrary({\n  root: \"Stack\",\n  componentGroups: openuiComponentGroups,\n  components: [\n    // Content\n    Card,\n    CardHeader,\n    TextContent,\n    MarkDownRenderer,\n    Callout,\n    TextCallout,\n    Image,\n    ImageBlock,\n    ImageGallery,\n    CodeBlock,\n    // Tables\n    Table,\n    Col,\n    // Charts (2D)\n    BarChartCondensed,\n    LineChartCondensed,\n    AreaChartCondensed,\n    RadarChart,\n    HorizontalBarChart,\n    Series,\n    // Charts (1D)\n    PieChart,\n    RadialChart,\n    SingleStackedBarChart,\n    Slice,\n    // Charts (Scatter)\n    ScatterChart,\n    ScatterSeries,\n    Point,\n\n    // Forms\n    Form,\n    FormControl,\n    Label,\n    Input,\n    TextArea,\n    Select,\n    SelectItem,\n    DatePicker,\n    Slider,\n    CheckBoxGroup,\n    CheckBoxItem,\n    RadioGroup,\n    RadioItem,\n    SwitchGroup,\n    SwitchItem,\n    // Buttons\n    Button,\n    Buttons,\n    // Layout\n    Stack,\n    Tabs,\n    TabItem,\n    Accordion,\n    AccordionItem,\n    Steps,\n    StepsItem,\n    Carousel,\n    Separator,\n    // Data Display\n    TagBlock,\n    Tag,\n    // Modal\n    Modal,\n  ],\n});\n","\"use client\";\n\nimport type { ComponentGroup, PromptOptions } from \"@openuidev/react-lang\";\nimport { createLibrary, defineComponent } from \"@openuidev/react-lang\";\nimport { z } from \"zod/v4\";\nimport { Card as OpenUICard } from \"../components/Card\";\n\n// Content\nimport { Callout } from \"./Callout\";\nimport { CardHeader } from \"./CardHeader\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport { Image } from \"./Image\";\nimport { ImageBlock } from \"./ImageBlock\";\nimport { ImageGallery } from \"./ImageGallery\";\nimport { MarkDownRenderer } from \"./MarkDownRenderer\";\nimport { Separator } from \"./Separator\";\nimport { TextCallout } from \"./TextCallout\";\nimport { TextContent } from \"./TextContent\";\n\n// Charts\nimport {\n  AreaChartCondensed,\n  BarChartCondensed,\n  HorizontalBarChart,\n  LineChartCondensed,\n  PieChart,\n  Point,\n  RadarChart,\n  RadialChart,\n  ScatterChart,\n  ScatterSeries,\n  Series,\n  SingleStackedBarChart,\n  Slice,\n} from \"./Charts\";\n\n// Forms\nimport { CheckBoxGroup, CheckBoxItem } from \"./CheckBoxGroup\";\nimport { DatePicker } from \"./DatePicker\";\nimport { Form } from \"./Form\";\nimport { FormControl } from \"./FormControl\";\nimport { Input } from \"./Input\";\nimport { Label } from \"./Label\";\nimport { RadioGroup, RadioItem } from \"./RadioGroup\";\nimport { Select, SelectItem } from \"./Select\";\nimport { Slider } from \"./Slider\";\nimport { SwitchGroup, SwitchItem } from \"./SwitchGroup\";\nimport { TextArea } from \"./TextArea\";\n\n// Buttons\nimport { Button } from \"./Button\";\nimport { Buttons } from \"./Buttons\";\n\n// Layout (no Stack)\nimport { Accordion, AccordionItem } from \"./Accordion\";\nimport { Carousel } from \"./Carousel\";\nimport { Steps, StepsItem } from \"./Steps\";\nimport { TabItem, Tabs } from \"./Tabs\";\n\n// Data Display\nimport { Col, Table } from \"./Table\";\nimport { Tag } from \"./Tag\";\nimport { TagBlock } from \"./TagBlock\";\n\n// Chat-specific\nimport { FollowUpBlock } from \"./FollowUpBlock\";\nimport { FollowUpItem } from \"./FollowUpItem\";\nimport { ListBlock } from \"./ListBlock\";\nimport { ListItem } from \"./ListItem\";\nimport { SectionBlock } from \"./SectionBlock\";\nimport { SectionItem } from \"./SectionItem\";\n\nimport { ChatContentChildUnion } from \"./unions\";\n\n// Tabs and Carousel are added here (not in unions.ts) to avoid the circular dep:\n// Tabs/schema.ts imports ContentChildUnion from unions.ts.\nconst ChatCardChildUnion = z.union([...ChatContentChildUnion.options, Tabs.ref, Carousel.ref]);\n\n// ── Locked Chat Card — no design params, always vertical ──\n\nconst ChatCard = defineComponent({\n  name: \"Card\",\n  props: z.object({\n    children: z.array(ChatCardChildUnion),\n  }),\n  description:\n    \"Vertical container for all content in a chat response. Children stack top to bottom automatically.\",\n  component: ({ props, renderNode }) => (\n    <OpenUICard\n      width=\"full\"\n      style={{\n        display: \"flex\",\n        flexDirection: \"column\",\n        gap: \"var(--openui-space-m)\",\n      }}\n    >\n      {renderNode(props.children)}\n    </OpenUICard>\n  ),\n});\n\n// ── Component Groups ──\n\nexport const openuiChatComponentGroups: ComponentGroup[] = [\n  {\n    name: \"Content\",\n    components: [\n      \"CardHeader\",\n      \"TextContent\",\n      \"MarkDownRenderer\",\n      \"Callout\",\n      \"TextCallout\",\n      \"Image\",\n      \"ImageBlock\",\n      \"ImageGallery\",\n      \"CodeBlock\",\n      \"Separator\",\n    ],\n  },\n  {\n    name: \"Tables\",\n    components: [\"Table\", \"Col\"],\n  },\n  {\n    name: \"Charts (2D)\",\n    components: [\n      \"BarChart\",\n      \"LineChart\",\n      \"AreaChart\",\n      \"RadarChart\",\n      \"HorizontalBarChart\",\n      \"Series\",\n    ],\n  },\n  {\n    name: \"Charts (1D)\",\n    components: [\"PieChart\", \"RadialChart\", \"SingleStackedBarChart\", \"Slice\"],\n  },\n  {\n    name: \"Charts (Scatter)\",\n    components: [\"ScatterChart\", \"ScatterSeries\", \"Point\"],\n  },\n  {\n    name: \"Forms\",\n    components: [\n      \"Form\",\n      \"FormControl\",\n      \"Label\",\n      \"Input\",\n      \"TextArea\",\n      \"Select\",\n      \"SelectItem\",\n      \"DatePicker\",\n      \"Slider\",\n      \"CheckBoxGroup\",\n      \"CheckBoxItem\",\n      \"RadioGroup\",\n      \"RadioItem\",\n      \"SwitchGroup\",\n      \"SwitchItem\",\n    ],\n    notes: [\n      \"- Define EACH FormControl as its own reference — do NOT inline all controls in one array.\",\n      \"- NEVER nest Form inside Form.\",\n      \"- Form requires explicit buttons. Always pass a Buttons(...) reference as the third Form argument.\",\n      \"- rules is an optional object: { required: true, email: true, min: 8, maxLength: 100 }\",\n      \"- The renderer shows error messages automatically — do NOT generate error text in the UI\",\n    ],\n  },\n  {\n    name: \"Buttons\",\n    components: [\"Button\", \"Buttons\"],\n  },\n  {\n    name: \"Lists & Follow-ups\",\n    components: [\"ListBlock\", \"ListItem\", \"FollowUpBlock\", \"FollowUpItem\"],\n    notes: [\n      \"- Use ListBlock with ListItem references for numbered, clickable lists.\",\n      \"- Use FollowUpBlock with FollowUpItem references at the end of a response to suggest next actions.\",\n      \"- Clicking a ListItem or FollowUpItem sends its text to the LLM as a user message.\",\n      '- Example: list = ListBlock([item1, item2])  item1 = ListItem(\"Option A\", \"Details about A\")',\n    ],\n  },\n  {\n    name: \"Sections\",\n    components: [\"SectionBlock\", \"SectionItem\"],\n    notes: [\n      \"- SectionBlock renders collapsible accordion sections that auto-open as they stream.\",\n      \"- Each section needs a unique `value` id, a `trigger` label, and a `content` array.\",\n      '- Example: sections = SectionBlock([s1, s2])  s1 = SectionItem(\"intro\", \"Introduction\", [content1])',\n      \"- Set isFoldable=false to render sections as flat headers instead of accordion.\",\n    ],\n  },\n  {\n    name: \"Layout\",\n    components: [\"Tabs\", \"TabItem\", \"Accordion\", \"AccordionItem\", \"Steps\", \"StepsItem\", \"Carousel\"],\n    notes: [\n      \"- Use Tabs to present alternative views — each TabItem has a value id, trigger label, and content array.\",\n      \"- Carousel takes an array of slides, where each slide is an array of content: carousel = Carousel([[t1, img1], [t2, img2]])\",\n      \"- IMPORTANT: Every slide in a Carousel must have the same structure — same component types in the same order.\",\n      \"- For image carousels use: [[title, image, description, tags], ...] — every slide must follow this exact pattern.\",\n      \"- Use real, publicly accessible image URLs (e.g. https://picsum.photos/seed/KEYWORD/800/500). Never hallucinate image URLs.\",\n    ],\n  },\n  {\n    name: \"Data Display\",\n    components: [\"TagBlock\", \"Tag\"],\n  },\n];\n\n// ── Examples ──\n\nexport const openuiChatExamples: string[] = [\n  `Example 1 — Table with follow-ups:\n\nroot = Card([title, tbl, followUps])\ntitle = TextContent(\"Top Languages\", \"large-heavy\")\ntbl = Table([Col(\"Language\", langs), Col(\"Users (M)\", users), Col(\"Year\", years)])\nlangs = [\"Python\", \"JavaScript\", \"Java\"]\nusers = [15.7, 14.2, 12.1]\nyears = [1991, 1995, 1995]\nfollowUps = FollowUpBlock([fu1, fu2])\nfu1 = FollowUpItem(\"Tell me more about Python\")\nfu2 = FollowUpItem(\"Show me a JavaScript comparison\")`,\n\n  `Example 2 — Clickable list:\n\nroot = Card([title, list])\ntitle = TextContent(\"Choose a topic\", \"large-heavy\")\nlist = ListBlock([item1, item2, item3])\nitem1 = ListItem(\"Getting started\", \"New to the platform? Start here.\")\nitem2 = ListItem(\"Advanced features\", \"Deep dives into powerful capabilities.\")\nitem3 = ListItem(\"Troubleshooting\", \"Common issues and how to fix them.\")`,\n\n  `Example 3 — Image carousel with consistent slides + follow-ups:\n\nroot = Card([header, carousel, followups])\nheader = CardHeader(\"Featured Destinations\", \"Discover highlights and best time to visit\")\ncarousel = Carousel([[t1, img1, d1, tags1], [t2, img2, d2, tags2], [t3, img3, d3, tags3]], \"card\")\nt1 = TextContent(\"Paris, France\", \"large-heavy\")\nimg1 = ImageBlock(\"https://picsum.photos/seed/paris/800/500\", \"Eiffel Tower at night\")\nd1 = TextContent(\"City of light — best Apr–Jun and Sep–Oct.\", \"default\")\ntags1 = TagBlock([\"Landmark\", \"City Break\", \"Culture\"])\nt2 = TextContent(\"Kyoto, Japan\", \"large-heavy\")\nimg2 = ImageBlock(\"https://picsum.photos/seed/kyoto/800/500\", \"Bamboo grove in Arashiyama\")\nd2 = TextContent(\"Temples and bamboo groves — best Mar–Apr and Nov.\", \"default\")\ntags2 = TagBlock([\"Temples\", \"Autumn\", \"Culture\"])\nt3 = TextContent(\"Machu Picchu, Peru\", \"large-heavy\")\nimg3 = ImageBlock(\"https://picsum.photos/seed/machupicchu/800/500\", \"Inca citadel in the clouds\")\nd3 = TextContent(\"High-altitude Inca citadel — best May–Sep.\", \"default\")\ntags3 = TagBlock([\"Andes\", \"Hike\", \"UNESCO\"])\nfollowups = FollowUpBlock([fu1, fu2])\nfu1 = FollowUpItem(\"Show me only beach destinations\")\nfu2 = FollowUpItem(\"Turn this into a comparison table\")`,\n\n  `Example 4 — Form with validation:\n\nroot = Card([title, form])\ntitle = TextContent(\"Contact Us\", \"large-heavy\")\nform = Form(\"contact\", btns, [nameField, emailField, msgField])\nnameField = FormControl(\"Name\", Input(\"name\", \"Your name\", \"text\", { required: true, minLength: 2 }))\nemailField = FormControl(\"Email\", Input(\"email\", \"you@example.com\", \"email\", { required: true, email: true }))\nmsgField = FormControl(\"Message\", TextArea(\"message\", \"Tell us more...\", 4, { required: true, minLength: 10 }))\nbtns = Buttons([Button(\"Submit\", Action([@ToAssistant(\"Submit\")]), \"primary\")])`,\n];\n\nexport const openuiChatAdditionalRules: string[] = [\n  \"Every response is a single Card(children) — children stack vertically automatically. No layout params are needed on Card.\",\n  \"Card is the only layout container. Do NOT use Stack. Use Tabs to switch between sections, Carousel for horizontal scroll.\",\n  \"Use FollowUpBlock at the END of a Card to suggest what the user can do or ask next.\",\n  \"Use ListBlock when presenting a set of options or steps the user can click to select.\",\n  \"Use SectionBlock to group long responses into collapsible sections — good for reports, FAQs, and structured content.\",\n  \"Use SectionItem inside SectionBlock: each item needs a unique value id, a trigger (header label), and a content array.\",\n  \"Carousel takes an array of slides, where each slide is an array of content: carousel = Carousel([[t1, img1], [t2, img2]])\",\n  \"IMPORTANT: Every slide in a Carousel must use the same component structure in the same order — e.g. all slides: [title, image, description, tags].\",\n  \"For image carousels, always use real accessible URLs like https://picsum.photos/seed/KEYWORD/800/500. Never hallucinate or invent image URLs.\",\n  \"For forms, define one FormControl reference per field so controls can stream progressively.\",\n  \"For forms, always provide the second Form argument with Buttons(...) actions: Form(name, buttons, fields).\",\n  \"Never nest Form inside Form.\",\n];\n\nexport const openuiChatPromptOptions: PromptOptions = {\n  examples: openuiChatExamples,\n  additionalRules: openuiChatAdditionalRules,\n};\n\n// ── Library ──\n\nexport const openuiChatLibrary = createLibrary({\n  root: \"Card\",\n  componentGroups: openuiChatComponentGroups,\n  components: [\n    // Root\n    ChatCard,\n    CardHeader,\n    // Content\n    TextContent,\n    MarkDownRenderer,\n    Callout,\n    TextCallout,\n    Image,\n    ImageBlock,\n    ImageGallery,\n    CodeBlock,\n    Separator,\n    // Tables\n    Table,\n    Col,\n    // Charts (2D)\n    BarChartCondensed,\n    LineChartCondensed,\n    AreaChartCondensed,\n    RadarChart,\n    HorizontalBarChart,\n    Series,\n    // Charts (1D)\n    PieChart,\n    RadialChart,\n    SingleStackedBarChart,\n    Slice,\n    // Charts (Scatter)\n    ScatterChart,\n    ScatterSeries,\n    Point,\n    // Forms\n    Form,\n    FormControl,\n    Label,\n    Input,\n    TextArea,\n    Select,\n    SelectItem,\n    DatePicker,\n    Slider,\n    CheckBoxGroup,\n    CheckBoxItem,\n    RadioGroup,\n    RadioItem,\n    SwitchGroup,\n    SwitchItem,\n    // Buttons\n    Button,\n    Buttons,\n    // Lists & Follow-ups\n    ListBlock,\n    ListItem,\n    FollowUpBlock,\n    FollowUpItem,\n    // Sections\n    SectionBlock,\n    SectionItem,\n    // Layout (no Stack)\n    Tabs,\n    TabItem,\n    Accordion,\n    AccordionItem,\n    Steps,\n    StepsItem,\n    Carousel,\n    // Data Display\n    TagBlock,\n    Tag,\n  ],\n});\n"],"mappings":"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1C,OAAI,CAAC,KACH,OAAM,SAAS,MAAM;;AAIzB,SACE,iBAAA,GAAA,kBAAA,KAACC,SAAD;GACE,OAAO,MAAM;GACb,MAAM;GACN,cAAc;GACd,MAAO,MAAM,QAA+B;aAE3C,WAAW,MAAM,SAAS;GACf,CAAA;;CAGnB,CAAC;;;ACkCF,MAAa,wBAA0C;CACrD;EACE,MAAM;EACN,YAAY;GACV;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY;GACV;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,OAAO;GACL;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY,CAAC,SAAS,MAAM;EAC5B,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY;GACV;GACA;GACA;GACA;GACA;GACA;GACD;EACD,OAAO;GACL;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY;GAAC;GAAY;GAAe;GAAyB;GAAQ;EACzE,OAAO;GACL;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY;GAAC;GAAgB;GAAiB;GAAQ;EACvD;CACD;EACE,MAAM;EACN,YAAY;GACV;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY,CAAC,UAAU,UAAU;EACjC,OAAO,CACL,8GACD;EACF;CACD;EACE,MAAM;EACN,YAAY,CAAC,YAAY,MAAM;EAC/B,OAAO,CACL,iIACD;EACF;CACF;AAID,MAAa,iBAA2B;CACtC;;;;;;;;CASA;;;;;;;;CASA;;;;;;;;;;;CAYA;;;;;;;;;CASD;AAED,MAAa,wBAAkC;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,sBAAqC;CAChD,UAAU;CACV,iBAAiB;CAClB;AAID,MAAa,iBAAA,GAAA,sBAAA,eAA8B;CACzC,MAAM;CACN,iBAAiB;CACjB,YAAY;EAEVC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EAEAC;EACA;EAEAC;EACAC;EACAC;EACAC;EACAC;EACA;EAEAC;EACAC;EACA;EACA;EAEAC;EACA;EACA;EAGA;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EAEAC;EACAC;EAEA;EACAC;EACA;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EAEAC;EACAC;EAEA;EACD;CACF,CAAC;;;ACnQF,MAAM,qBAAqBC,OAAAA,EAAE,MAAM;CAAC,GAAG,sBAAsB;CAASC,OAAK;CAAKC,WAAS;CAAI,CAAC;AAI9F,MAAM,YAAA,GAAA,sBAAA,iBAA2B;CAC/B,MAAM;CACN,OAAOF,OAAAA,EAAE,OAAO,EACd,UAAUA,OAAAA,EAAE,MAAM,mBAAmB,EACtC,CAAC;CACF,aACE;CACF,YAAY,EAAE,OAAO,iBACnB,iBAAA,GAAA,kBAAA,KAACG,MAAD;EACE,OAAM;EACN,OAAO;GACL,SAAS;GACT,eAAe;GACf,KAAK;GACN;YAEA,WAAW,MAAM,SAAS;EAChB,CAAA;CAEhB,CAAC;AAIF,MAAa,4BAA8C;CACzD;EACE,MAAM;EACN,YAAY;GACV;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY,CAAC,SAAS,MAAM;EAC7B;CACD;EACE,MAAM;EACN,YAAY;GACV;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY;GAAC;GAAY;GAAe;GAAyB;GAAQ;EAC1E;CACD;EACE,MAAM;EACN,YAAY;GAAC;GAAgB;GAAiB;GAAQ;EACvD;CACD;EACE,MAAM;EACN,YAAY;GACV;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,OAAO;GACL;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY,CAAC,UAAU,UAAU;EAClC;CACD;EACE,MAAM;EACN,YAAY;GAAC;GAAa;GAAY;GAAiB;GAAe;EACtE,OAAO;GACL;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY,CAAC,gBAAgB,cAAc;EAC3C,OAAO;GACL;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY;GAAC;GAAQ;GAAW;GAAa;GAAiB;GAAS;GAAa;GAAW;EAC/F,OAAO;GACL;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,YAAY,CAAC,YAAY,MAAM;EAChC;CACF;AAID,MAAa,qBAA+B;CAC1C;;;;;;;;;;;CAYA;;;;;;;;CASA;;;;;;;;;;;;;;;;;;;;CAqBA;;;;;;;;;CASD;AAED,MAAa,4BAAsC;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,0BAAyC;CACpD,UAAU;CACV,iBAAiB;CAClB;AAID,MAAa,qBAAA,GAAA,sBAAA,eAAkC;CAC7C,MAAM;CACN,iBAAiB;CACjB,YAAY;EAEV;EACAC;EAEAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EAEAC;EACA;EAEAC;EACAC;EACAC;EACAC;EACAC;EACA;EAEAC;EACAC;EACA;EACA;EAEAC;EACA;EACA;EAEA;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EAEAC;EACAC;EAEAC;EACAC;EACAC;EACAC;EAEA;EACA;EAEAzC;EACA;EACA0C;EACAC;EACAC;EACAC;EACA5C;EAEA6C;EACAC;EACD;CACF,CAAC"}