@flikk/ui 1.0.0-beta.30 → 1.0.0-beta.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +375 -5
- package/dist/components/ai/AgentRequest/AgentRequest.animations.d.ts +25 -0
- package/dist/components/ai/AgentRequest/AgentRequest.animations.js +81 -0
- package/dist/components/ai/AgentRequest/AgentRequest.d.ts +3 -0
- package/dist/components/ai/AgentRequest/AgentRequest.js +435 -0
- package/dist/components/ai/AgentRequest/AgentRequest.theme.d.ts +2 -0
- package/dist/components/ai/AgentRequest/AgentRequest.theme.js +106 -0
- package/dist/components/ai/AgentRequest/AgentRequest.types.d.ts +241 -0
- package/dist/components/ai/AgentRequest/index.d.ts +3 -0
- package/dist/components/ai/AgentStatus/AgentStatus.d.ts +3 -0
- package/dist/components/ai/AgentStatus/AgentStatus.js +144 -0
- package/dist/components/ai/AgentStatus/AgentStatus.theme.d.ts +2 -0
- package/dist/components/ai/AgentStatus/AgentStatus.theme.js +37 -0
- package/dist/components/ai/AgentStatus/AgentStatus.types.d.ts +116 -0
- package/dist/components/ai/AgentStatus/index.d.ts +3 -0
- package/dist/components/ai/CodeBlock/CodeBlock.js +3 -3
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +2 -2
- package/dist/components/ai/PromptInput/PromptInput.js +13 -14
- package/dist/components/ai/PromptInput/PromptInput.theme.js +3 -3
- package/dist/components/ai/PromptInput/VoiceRecorder.js +3 -3
- package/dist/components/ai/PromptSuggestion/PromptSuggestion.theme.js +2 -2
- package/dist/components/ai/Reasoning/Reasoning.d.ts +5 -0
- package/dist/components/ai/Reasoning/Reasoning.js +40 -0
- package/dist/components/ai/Reasoning/Reasoning.theme.d.ts +6 -0
- package/dist/components/ai/Reasoning/Reasoning.theme.js +36 -0
- package/dist/components/ai/Reasoning/Reasoning.types.d.ts +73 -0
- package/dist/components/ai/Reasoning/ReasoningTrace.d.ts +11 -0
- package/dist/components/ai/Reasoning/ReasoningTrace.js +84 -0
- package/dist/components/ai/Reasoning/index.d.ts +3 -0
- package/dist/components/ai/SourceCitation/SourceCitation.d.ts +4 -0
- package/dist/components/ai/SourceCitation/SourceCitation.js +29 -0
- package/dist/components/ai/SourceCitation/SourceCitation.theme.d.ts +2 -0
- package/dist/components/ai/SourceCitation/SourceCitation.theme.js +23 -0
- package/dist/components/ai/SourceCitation/SourceCitation.types.d.ts +55 -0
- package/dist/components/ai/SourceCitation/index.d.ts +3 -0
- package/dist/components/ai/StreamingResponse/AnimatedText.d.ts +7 -0
- package/dist/components/ai/StreamingResponse/AnimatedText.js +8 -7
- package/dist/components/ai/StreamingResponse/ErrorDisplay.js +2 -2
- package/dist/components/ai/StreamingResponse/MarkdownRenderer.d.ts +5 -0
- package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +4 -4
- package/dist/components/ai/StreamingResponse/StreamingCursor.d.ts +2 -2
- package/dist/components/ai/StreamingResponse/StreamingCursor.js +10 -7
- package/dist/components/ai/StreamingResponse/StreamingResponse.animations.d.ts +10 -0
- package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +59 -33
- package/dist/components/ai/StreamingResponse/StreamingResponse.js +14 -10
- package/dist/components/ai/StreamingResponse/StreamingResponse.theme.js +3 -1
- package/dist/components/ai/StreamingResponse/StreamingResponse.types.d.ts +33 -2
- package/dist/components/ai/StreamingResponse/StreamingSurface.d.ts +13 -0
- package/dist/components/ai/StreamingResponse/StreamingSurface.js +38 -0
- package/dist/components/ai/StreamingResponse/WordAnimationContext.d.ts +5 -0
- package/dist/components/ai/StreamingResponse/WordAnimationContext.js +5 -4
- package/dist/components/ai/StreamingResponse/index.d.ts +4 -2
- package/dist/components/ai/TokenCounter/TokenCounter.js +2 -2
- package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
- package/dist/components/ai/index.d.ts +6 -2
- package/dist/components/ai/index.js +10 -3
- package/dist/components/ai/shared/StatusIndicator.d.ts +8 -0
- package/dist/components/ai/shared/StatusIndicator.js +34 -0
- package/dist/components/canvas/BaseNode.js +1 -1
- package/dist/components/canvas/CanvasToolbar.js +2 -3
- package/dist/components/canvas/Edge.js +2 -2
- package/dist/components/canvas/NodeControls.js +2 -3
- package/dist/components/canvas/NodeRenderer.js +4 -4
- package/dist/components/charts/ActivityRings/ActivityRings.js +4 -4
- package/dist/components/charts/ActivityRings/ActivityRings.theme.js +1 -1
- package/dist/components/charts/AreaChart/AreaChart.js +24 -35
- package/dist/components/charts/AreaChart/AreaChart.theme.d.ts +1 -6
- package/dist/components/charts/AreaChart/AreaChart.theme.js +10 -22
- package/dist/components/charts/AreaChart/AreaChart.types.d.ts +18 -11
- package/dist/components/charts/AreaChart/AreaChart.types.js +10 -3
- package/dist/components/charts/AreaChart/index.d.ts +1 -1
- package/dist/components/charts/BarChart/BarChart.js +13 -32
- package/dist/components/charts/BarChart/BarChart.types.d.ts +20 -16
- package/dist/components/charts/BarChart/BarChart.types.js +11 -4
- package/dist/components/charts/ComboChart/BarRenderer.js +10 -7
- package/dist/components/charts/ComboChart/BarRenderer.types.d.ts +1 -1
- package/dist/components/charts/ComboChart/ComboChart.js +11 -24
- package/dist/components/charts/ComboChart/ComboChart.types.d.ts +15 -13
- package/dist/components/charts/ComboChart/ComboChart.types.js +14 -2
- package/dist/components/charts/ComboChart/ComboChartCanvas.js +1 -1
- package/dist/components/charts/ComboChart/LineRenderer.js +16 -11
- package/dist/components/charts/ComboChart/LineRenderer.types.d.ts +1 -1
- package/dist/components/charts/DonutChart/DonutChart.theme.js +4 -4
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.theme.js +1 -1
- package/dist/components/charts/Heatmap/Heatmap.js +49 -42
- package/dist/components/charts/Heatmap/Heatmap.theme.d.ts +6 -2
- package/dist/components/charts/Heatmap/Heatmap.theme.js +20 -8
- package/dist/components/charts/Heatmap/Heatmap.types.d.ts +49 -82
- package/dist/components/charts/Heatmap/HeatmapCell.js +30 -81
- package/dist/components/charts/Heatmap/HeatmapLegend.d.ts +7 -6
- package/dist/components/charts/Heatmap/HeatmapLegend.js +6 -6
- package/dist/components/charts/Heatmap/index.d.ts +1 -1
- package/dist/components/charts/Heatmap/utils/heatmapUtils.d.ts +7 -12
- package/dist/components/charts/Heatmap/utils/heatmapUtils.js +16 -61
- package/dist/components/charts/Heatmap/utils/heatmapUtils.test.d.ts +1 -0
- package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.d.ts +16 -0
- package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.js +237 -0
- package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.types.d.ts +62 -0
- package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.types.js +21 -0
- package/dist/components/charts/HorizontalBarChart/index.d.ts +3 -0
- package/dist/components/charts/LineChart/LineChart.js +11 -28
- package/dist/components/charts/LineChart/LineChart.types.d.ts +11 -14
- package/dist/components/charts/LineChart/LineChart.types.js +11 -3
- package/dist/components/charts/LollipopChart/LollipopChart.d.ts +3 -0
- package/dist/components/charts/LollipopChart/LollipopChart.js +361 -0
- package/dist/components/charts/LollipopChart/LollipopChart.types.d.ts +42 -0
- package/dist/components/charts/LollipopChart/LollipopChart.types.js +12 -0
- package/dist/components/charts/LollipopChart/index.d.ts +3 -0
- package/dist/components/charts/RadarChart/RadarChart.js +1 -1
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +151 -133
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +20 -18
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.js +10 -4
- package/dist/components/charts/hooks/useChartAccessibility.d.ts +1 -1
- package/dist/components/charts/hooks/useChartAccessibility.js +12 -6
- package/dist/components/charts/hooks/useTooltipPosition.js +18 -6
- package/dist/components/charts/index.d.ts +10 -8
- package/dist/components/charts/index.js +8 -4
- package/dist/components/charts/shared/ChartAxis/CategoryYAxis.d.ts +14 -0
- package/dist/components/charts/shared/ChartAxis/CategoryYAxis.js +35 -0
- package/dist/components/charts/shared/ChartAxis/ChartAxis.types.d.ts +69 -8
- package/dist/components/charts/shared/ChartAxis/ValueXAxis.d.ts +14 -0
- package/dist/components/charts/shared/ChartAxis/ValueXAxis.js +64 -0
- package/dist/components/charts/shared/ChartAxis/XAxis.js +1 -1
- package/dist/components/charts/shared/ChartAxis/YAxis.js +2 -2
- package/dist/components/charts/shared/ChartAxis/index.d.ts +3 -1
- package/dist/components/charts/shared/ChartGrid/HorizontalGrid.d.ts +0 -2
- package/dist/components/charts/shared/ChartGrid/HorizontalGrid.js +1 -1
- package/dist/components/charts/shared/ChartGrid/VerticalGrid.d.ts +29 -0
- package/dist/components/charts/shared/ChartGrid/VerticalGrid.js +26 -0
- package/dist/components/charts/shared/ChartGrid/index.d.ts +2 -0
- package/dist/components/charts/shared/ChartMarker/ChartMarker.js +7 -1
- package/dist/components/charts/shared/ChartText/ChartText.theme.js +1 -1
- package/dist/components/charts/shared/index.d.ts +1 -1
- package/dist/components/charts/theme/chart.theme.js +21 -26
- package/dist/components/charts/types/chart.types.d.ts +9 -5
- package/dist/components/charts/types/chart.types.js +1 -7
- package/dist/components/charts/utils/animation-utils.d.ts +12 -7
- package/dist/components/charts/utils/animation-utils.js +19 -21
- package/dist/components/charts/utils/bar-emphasis.d.ts +32 -3
- package/dist/components/charts/utils/bar-emphasis.js +24 -8
- package/dist/components/charts/utils/index.d.ts +1 -0
- package/dist/components/charts/utils/series-color.d.ts +7 -0
- package/dist/components/charts/utils/series-color.js +20 -0
- package/dist/components/core/Accordion/Accordion.theme.js +3 -3
- package/dist/components/core/Accordion/AccordionTrigger.js +2 -2
- package/dist/components/core/Alert/Alert.animations.d.ts +11 -3
- package/dist/components/core/Alert/Alert.animations.js +30 -8
- package/dist/components/core/Alert/Alert.js +23 -9
- package/dist/components/core/Alert/Alert.theme.js +1 -1
- package/dist/components/core/Alert/Alert.types.d.ts +4 -2
- package/dist/components/core/AlertDialog/AlertDialog.js +2 -2
- package/dist/components/core/Avatar/Avatar.js +50 -42
- package/dist/components/core/Avatar/Avatar.theme.d.ts +8 -4
- package/dist/components/core/Avatar/Avatar.theme.js +64 -8
- package/dist/components/core/Avatar/Avatar.types.d.ts +13 -2
- package/dist/components/core/Avatar/index.d.ts +1 -1
- package/dist/components/core/AvatarGroup/AvatarGroup.js +6 -8
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.d.ts +1 -2
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +2 -6
- package/dist/components/core/AvatarGroup/AvatarGroup.types.d.ts +0 -6
- package/dist/components/core/AvatarGroup/index.d.ts +1 -1
- package/dist/components/core/Badge/Badge.animations.d.ts +0 -5
- package/dist/components/core/Badge/Badge.animations.js +5 -82
- package/dist/components/core/Badge/Badge.d.ts +7 -4
- package/dist/components/core/Badge/Badge.js +33 -65
- package/dist/components/core/Badge/Badge.theme.js +26 -24
- package/dist/components/core/Badge/Badge.types.d.ts +18 -34
- package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.d.ts +1 -4
- package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.js +6 -6
- package/dist/components/core/Button/Button.js +14 -58
- package/dist/components/core/Button/Button.theme.d.ts +2 -0
- package/dist/components/core/Button/Button.theme.js +35 -22
- package/dist/components/core/Button/Button.types.d.ts +26 -13
- package/dist/components/core/Button/index.d.ts +0 -2
- package/dist/components/core/Calendar/Calendar.js +20 -5
- package/dist/components/core/Calendar/Calendar.theme.js +15 -23
- package/dist/components/core/Calendar/Calendar.types.d.ts +0 -1
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +3 -3
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.theme.js +2 -2
- package/dist/components/core/Card/Card.js +7 -2
- package/dist/components/core/Card/Card.theme.js +40 -4
- package/dist/components/core/Card/Card.types.d.ts +20 -0
- package/dist/components/core/Card/CardBody.js +9 -1
- package/dist/components/core/Card/CardContext.d.ts +13 -0
- package/dist/components/core/Card/CardContext.js +14 -0
- package/dist/components/core/Card/CardFooter.js +1 -1
- package/dist/components/core/Card/CardHeader.js +4 -1
- package/dist/components/core/CommandPalette/CommandPalette.js +5 -4
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +3 -7
- package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +2 -0
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +4 -3
- package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +8 -1
- package/dist/components/core/ContextMenu/ContextMenuItem.js +2 -2
- package/dist/components/core/ContextMenu/ContextMenuSub.d.ts +11 -1
- package/dist/components/core/ContextMenu/ContextMenuSub.js +35 -22
- package/dist/components/core/ContextMenu/ContextMenuSubBody.js +14 -3
- package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +22 -9
- package/dist/components/core/DragDrop/DragDrop.theme.js +2 -2
- package/dist/components/core/Drawer/Drawer.theme.js +7 -4
- package/dist/components/core/Drawer/DrawerHeader.js +2 -3
- package/dist/components/core/Dropdown/Dropdown.theme.js +3 -1
- package/dist/components/core/Dropdown/DropdownItem.js +2 -2
- package/dist/components/core/Dropdown/DropdownMenu.js +22 -7
- package/dist/components/core/Dropdown/DropdownTrigger.js +16 -5
- package/dist/components/core/HeroCard/HeroCard.theme.js +5 -2
- package/dist/components/core/Kbd/Kbd.theme.js +4 -2
- package/dist/components/core/Link/Link.js +7 -5
- package/dist/components/core/Masonry/Masonry.theme.js +1 -1
- package/dist/components/core/MenuItem/MenuItem.js +2 -1
- package/dist/components/core/MenuItem/MenuItem.theme.js +13 -1
- package/dist/components/core/Message/Message.js +4 -2
- package/dist/components/core/Message/Message.theme.js +8 -10
- package/dist/components/core/Message/MessageAudio.js +2 -2
- package/dist/components/core/Message/MessageFile.js +2 -2
- package/dist/components/core/Message/MessageLink.js +2 -2
- package/dist/components/core/Message/MessageStatusIndicator.js +5 -5
- package/dist/components/core/Modal/Modal.animations.d.ts +1 -1
- package/dist/components/core/Modal/Modal.animations.js +50 -11
- package/dist/components/core/Modal/Modal.d.ts +1 -1
- package/dist/components/core/Modal/Modal.js +6 -2
- package/dist/components/core/Modal/Modal.theme.js +9 -4
- package/dist/components/core/Modal/ModalHeader.js +2 -3
- package/dist/components/core/ModalStack/ModalStackModal.js +4 -2
- package/dist/components/core/NavItem/NavItem.js +8 -7
- package/dist/components/core/NavItem/NavItem.theme.js +1 -1
- package/dist/components/core/OfflineIndicator/OfflineIndicator.animations.d.ts +22 -0
- package/dist/components/core/OfflineIndicator/OfflineIndicator.animations.js +54 -0
- package/dist/components/core/OfflineIndicator/OfflineIndicator.js +23 -24
- package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +27 -6
- package/dist/components/core/OfflineIndicator/OfflineIndicator.types.d.ts +17 -0
- package/dist/components/core/PageHeading/PageHeading.theme.js +1 -1
- package/dist/components/core/PageHeading/PageHeadingBackButton.js +2 -2
- package/dist/components/core/Pagination/Pagination.js +3 -3
- package/dist/components/core/Pagination/Pagination.theme.js +5 -5
- package/dist/components/core/Pill/Pill.js +5 -2
- package/dist/components/core/Pill/Pill.theme.js +9 -5
- package/dist/components/core/Popover/PopoverBody.js +16 -5
- package/dist/components/core/Progress/Progress.d.ts +0 -25
- package/dist/components/core/Progress/Progress.js +79 -11
- package/dist/components/core/Progress/Progress.theme.js +17 -0
- package/dist/components/core/Progress/Progress.types.d.ts +47 -1
- package/dist/components/core/Rating/Rating.js +4 -5
- package/dist/components/core/Rating/Rating.theme.js +2 -2
- package/dist/components/core/Rating/Rating.types.d.ts +3 -2
- package/dist/components/core/ScrollArea/ScrollArea.js +1 -1
- package/dist/components/core/ScrollArea/ScrollArea.theme.js +1 -1
- package/dist/components/core/Segmented/Segmented.theme.js +10 -7
- package/dist/components/core/Segmented/SegmentedContext.js +1 -0
- package/dist/components/core/Sidebar/Sidebar.js +5 -2
- package/dist/components/core/Sidebar/Sidebar.theme.js +2 -2
- package/dist/components/core/Sidebar/Sidebar.types.d.ts +4 -2
- package/dist/components/core/Sidebar/SidebarContent.js +1 -1
- package/dist/components/core/Sidebar/SidebarHeader.js +3 -3
- package/dist/components/core/Sidebar/SidebarMobileTrigger.js +2 -2
- package/dist/components/core/Sidebar/SidebarSearch.js +4 -4
- package/dist/components/core/Sidebar/SidebarToggle.js +3 -3
- package/dist/components/core/Sidebar/SidebarUserProfile.js +3 -3
- package/dist/components/core/Sortable/Sortable.js +2 -2
- package/dist/components/core/Sortable/Sortable.theme.js +1 -1
- package/dist/components/core/Tabs/Tabs.theme.js +1 -1
- package/dist/components/core/Tag/Tag.js +2 -2
- package/dist/components/core/Tag/Tag.theme.js +5 -3
- package/dist/components/core/Toast/Toast.js +3 -3
- package/dist/components/core/Toast/Toast.types.d.ts +1 -1
- package/dist/components/core/Toast/ToastProvider.js +1 -1
- package/dist/components/core/Toast/useToast.js +5 -5
- package/dist/components/core/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/core/Tooltip/Tooltip.js +42 -10
- package/dist/components/core/Tooltip/Tooltip.types.d.ts +25 -0
- package/dist/components/core/Tree/Tree.js +2 -2
- package/dist/components/core/Tree/Tree.theme.js +1 -1
- package/dist/components/core/index.d.ts +0 -2
- package/dist/components/core/index.js +0 -4
- package/dist/components/core/shared/ChartTooltip/ChartTooltip.animations.d.ts +4 -0
- package/dist/components/core/shared/ChartTooltip/ChartTooltip.animations.js +20 -0
- package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.js +1 -1
- package/dist/components/core/shared/Ripple.d.ts +16 -0
- package/dist/components/core/shared/Ripple.js +141 -0
- package/dist/components/core/shared/interaction.animations.d.ts +51 -0
- package/dist/components/core/shared/interaction.animations.js +59 -0
- package/dist/components/data-display/Feed/Feed.js +2 -2
- package/dist/components/data-display/GanttChart/GanttChart.theme.js +7 -7
- package/dist/components/data-display/GanttChart/GanttChartPanel.js +2 -2
- package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +3 -3
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +1 -1
- package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +2 -2
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +1 -1
- package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -3
- package/dist/components/data-display/KPI/KPI.js +12 -21
- package/dist/components/data-display/KPI/KPI.theme.js +8 -4
- package/dist/components/data-display/Metric/Metric.js +2 -2
- package/dist/components/data-display/Metric/Metric.theme.js +25 -8
- package/dist/components/data-display/Metric/Metric.types.d.ts +1 -1
- package/dist/components/data-display/Table/Table.theme.js +11 -11
- package/dist/components/data-display/Table/TableActions.js +2 -2
- package/dist/components/data-display/Table/TableActionsMenu.js +1 -1
- package/dist/components/data-display/Table/TableColumnManager.js +2 -3
- package/dist/components/data-display/Table/TableContext.js +1 -0
- package/dist/components/data-display/Table/TableDeclarative.js +3 -3
- package/dist/components/data-display/Table/TableFilter.js +13 -6
- package/dist/components/data-display/Table/TableHeader.js +3 -3
- package/dist/components/data-display/Table/TableRow.js +2 -2
- package/dist/components/data-display/Table/TableSelectionHeader.js +4 -4
- package/dist/components/data-display/Timeline/Timeline.theme.js +1 -1
- package/dist/components/data-display/Timeline/TimelineMarker.js +2 -2
- package/dist/components/effects/CustomCursor/CustomCursor.d.ts +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.js +3 -3
- package/dist/components/effects/CustomCursor/CustomCursor.theme.js +4 -4
- package/dist/components/effects/DotPattern/DotPattern.js +6 -0
- package/dist/components/effects/DotPattern/DotPattern.types.d.ts +4 -2
- package/dist/components/effects/MeshGradient/MeshGradient.utils.d.ts +1 -1
- package/dist/components/effects/MeshGradient/MeshGradient.utils.js +1 -1
- package/dist/components/effects/Neumorphic/InsetCircleButton.js +1 -1
- package/dist/components/effects/Overlay/Overlay.js +7 -3
- package/dist/components/effects/index.d.ts +0 -32
- package/dist/components/effects/index.js +0 -16
- package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.d.ts +0 -2
- package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.js +1 -93
- package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.types.d.ts +0 -10
- package/dist/components/effects/shared/ShaderCanvas/index.d.ts +1 -1
- package/dist/components/effects/shared/index.d.ts +1 -3
- package/dist/components/effects/shared/shaderNoise.glsl.d.ts +1 -1
- package/dist/components/effects/shared/shaderNoise.glsl.js +2 -11
- package/dist/components/forms/Checkbox/Checkbox.js +2 -1
- package/dist/components/forms/Checkbox/Checkbox.theme.js +3 -3
- package/dist/components/forms/ColorPicker/ColorPickerEyeDropper.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerGradient.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerHeader.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerImage.js +3 -3
- package/dist/components/forms/ColorPicker/ColorPickerInput.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerPresets.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerSavedColors.js +2 -2
- package/dist/components/forms/Combobox/Combobox.js +5 -3
- package/dist/components/forms/Combobox/Combobox.theme.js +2 -2
- package/dist/components/forms/DatePicker/DatePicker.animations.js +16 -25
- package/dist/components/forms/DatePicker/DatePicker.theme.js +2 -2
- package/dist/components/forms/DatePicker/DatePickerBody.js +1 -1
- package/dist/components/forms/DatePicker/DatePickerTrigger.js +2 -2
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +4 -4
- package/dist/components/forms/DateRangePicker/DateRangePickerBody.js +1 -1
- package/dist/components/forms/DateRangePicker/DateRangePickerContext.js +1 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerPresets.js +2 -2
- package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +2 -2
- package/dist/components/forms/FileUpload/FileUpload.js +4 -4
- package/dist/components/forms/FileUpload/FileUpload.theme.js +7 -3
- package/dist/components/forms/FileUpload/FileUploadProgress.js +7 -7
- package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +1 -1
- package/dist/components/forms/Input/Input.js +6 -7
- package/dist/components/forms/Input/Input.theme.js +19 -15
- package/dist/components/forms/InputAddress/InputAddress.js +10 -3
- package/dist/components/forms/InputAddress/InputAddress.types.d.ts +2 -2
- package/dist/components/forms/InputCounter/InputCounter.js +3 -3
- package/dist/components/forms/InputOTP/InputOTP.d.ts +3 -12
- package/dist/components/forms/InputOTP/InputOTP.js +140 -151
- package/dist/components/forms/InputOTP/InputOTP.theme.d.ts +5 -1
- package/dist/components/forms/InputOTP/InputOTP.theme.js +40 -5
- package/dist/components/forms/InputOTP/InputOTP.types.d.ts +45 -2
- package/dist/components/forms/InputOTP/index.d.ts +1 -1
- package/dist/components/forms/InputTag/InputTag.js +5 -5
- package/dist/components/forms/InputTag/InputTag.theme.js +1 -2
- package/dist/components/forms/Mention/Mention.theme.js +3 -5
- package/dist/components/forms/Radio/Radio.js +3 -2
- package/dist/components/forms/Radio/Radio.theme.js +3 -3
- package/dist/components/forms/RichTextEditor/RichTextEditor.d.ts +12 -16
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +165 -1681
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.d.ts +12 -56
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +60 -118
- package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +62 -126
- package/dist/components/forms/RichTextEditor/RichTextLinkField.d.ts +18 -0
- package/dist/components/forms/RichTextEditor/RichTextLinkField.js +46 -0
- package/dist/components/forms/RichTextEditor/RichTextToolbar.d.ts +15 -0
- package/dist/components/forms/RichTextEditor/RichTextToolbar.js +93 -0
- package/dist/components/forms/RichTextEditor/editorCommands.d.ts +50 -0
- package/dist/components/forms/RichTextEditor/editorCommands.js +58 -0
- package/dist/components/forms/RichTextEditor/editorState.d.ts +19 -0
- package/dist/components/forms/RichTextEditor/editorState.js +103 -0
- package/dist/components/forms/RichTextEditor/index.d.ts +5 -3
- package/dist/components/forms/RichTextEditor/sanitizeHtml.d.ts +38 -0
- package/dist/components/forms/RichTextEditor/sanitizeHtml.js +179 -0
- package/dist/components/forms/RichTextEditor/sanitizeHtml.test.d.ts +1 -0
- package/dist/components/forms/Select/Select.d.ts +5 -1
- package/dist/components/forms/Select/Select.js +14 -13
- package/dist/components/forms/Select/Select.theme.js +4 -4
- package/dist/components/forms/Select/Select.types.d.ts +74 -8
- package/dist/components/forms/Select/useSelectState.d.ts +9 -3
- package/dist/components/forms/Select/useSelectState.js +4 -1
- package/dist/components/forms/SelectableCard/SelectableCard.animations.d.ts +1 -2
- package/dist/components/forms/SelectableCard/SelectableCard.animations.js +6 -7
- package/dist/components/forms/SelectableCard/SelectableCard.js +3 -2
- package/dist/components/forms/SelectableCard/SelectableCard.theme.js +1 -1
- package/dist/components/forms/Signature/Signature.js +1 -1
- package/dist/components/forms/Slider/Slider.js +24 -11
- package/dist/components/forms/Slider/Slider.theme.js +9 -3
- package/dist/components/forms/Switch/Switch.theme.js +3 -3
- package/dist/components/forms/TimePicker/TimePicker.theme.js +7 -8
- package/dist/components/forms/TimePicker/TimePickerContent.js +1 -1
- package/dist/components/forms/TimePicker/TimePickerTrigger.js +3 -3
- package/dist/components/forms/forms.theme.js +38 -13
- package/dist/components/forms/index.js +2 -1
- package/dist/components/generative/FormShell.d.ts +22 -0
- package/dist/components/generative/FormShell.js +102 -0
- package/dist/components/generative/GenerativeView.d.ts +52 -1
- package/dist/components/generative/GenerativeView.js +203 -11
- package/dist/components/generative/actions.d.ts +5 -0
- package/dist/components/generative/ai-sdk/index.d.ts +1 -0
- package/dist/components/generative/ai-sdk/index.js +1 -0
- package/dist/components/generative/ai-sdk/useGenerativeChat.d.ts +52 -0
- package/dist/components/generative/ai-sdk/useGenerativeChat.js +73 -0
- package/dist/components/generative/ai-sdk/useGenerativeChat.test.d.ts +1 -0
- package/dist/components/generative/fieldBinding.d.ts +31 -0
- package/dist/components/generative/fieldBinding.js +33 -0
- package/dist/components/generative/fieldBinding.test.d.ts +1 -0
- package/dist/components/generative/formScope.d.ts +71 -0
- package/dist/components/generative/formScope.js +135 -0
- package/dist/components/generative/index.d.ts +4 -0
- package/dist/components/generative/index.js +4 -0
- package/dist/components/generative/registry.d.ts +2 -0
- package/dist/components/generative/registry.js +197 -4
- package/dist/components/generative/resolvers.js +16 -16
- package/dist/components/generative/schema.generated.js +2522 -328
- package/dist/components/generative/toToolResult.d.ts +21 -0
- package/dist/components/generative/toToolResult.js +15 -0
- package/dist/components/generative/toToolResult.test.d.ts +1 -0
- package/dist/components/generative/validate.d.ts +10 -1
- package/dist/components/generative/validate.js +126 -11
- package/dist/components/layout/Grid/Grid.js +1 -0
- package/dist/components/layout/Section/Section.theme.js +1 -1
- package/dist/components/layout/Stack/Stack.js +1 -0
- package/dist/generative.schema.json +2522 -328
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/useElapsedTime.d.ts +28 -0
- package/dist/hooks/useElapsedTime.js +37 -0
- package/dist/hooks/useSelectPortal.d.ts +10 -2
- package/dist/hooks/useSelectPortal.js +6 -3
- package/dist/index.js +2 -5
- package/dist/registry.json +3262 -2464
- package/dist/shadcn-compat.css +6 -6
- package/dist/styles/theme.test.d.ts +1 -0
- package/dist/styles.css +1 -1
- package/dist/test/render.d.ts +17 -0
- package/dist/theme.css +5 -1
- package/dist/themes/ember.css +131 -0
- package/dist/themes/iris.css +94 -0
- package/dist/themes/jade.css +139 -0
- package/dist/themes/precision.css +232 -0
- package/dist/tools.json +2557 -328
- package/dist/utils/colorUtils.d.ts +6 -6
- package/dist/utils/colorUtils.js +8 -8
- package/dist/utils/index.d.ts +0 -1
- package/package.json +39 -6
- package/src/global.scss +32 -28
- package/src/styles/theme.css +547 -176
- package/src/styles/theme.test.ts +119 -0
- package/tailwind.preset.cjs +66 -38
- package/dist/components/charts/FunnelChart/FunnelChart.animations.d.ts +0 -35
- package/dist/components/charts/FunnelChart/FunnelChart.animations.js +0 -59
- package/dist/components/charts/FunnelChart/FunnelChart.d.ts +0 -8
- package/dist/components/charts/FunnelChart/FunnelChart.js +0 -410
- package/dist/components/charts/FunnelChart/FunnelChart.theme.d.ts +0 -2
- package/dist/components/charts/FunnelChart/FunnelChart.theme.js +0 -12
- package/dist/components/charts/FunnelChart/FunnelChart.types.d.ts +0 -105
- package/dist/components/charts/FunnelChart/index.d.ts +0 -4
- package/dist/components/charts/ScatterPlot/ScatterPlot.d.ts +0 -9
- package/dist/components/charts/ScatterPlot/ScatterPlot.js +0 -207
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.d.ts +0 -18
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +0 -42
- package/dist/components/charts/ScatterPlot/ScatterPlot.types.d.ts +0 -65
- package/dist/components/charts/ScatterPlot/ScatterPlot.types.js +0 -12
- package/dist/components/charts/ScatterPlot/index.d.ts +0 -3
- package/dist/components/core/Button/Button.ripple.d.ts +0 -71
- package/dist/components/core/Button/Button.ripple.js +0 -236
- package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.d.ts +0 -4
- package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.theme.d.ts +0 -12
- package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.types.d.ts +0 -23
- package/dist/components/core/Calendar/CalendarEvent/index.d.ts +0 -2
- package/dist/components/core/CardStack/CardStack.animations.d.ts +0 -47
- package/dist/components/core/CardStack/CardStack.d.ts +0 -3
- package/dist/components/core/CardStack/CardStack.js +0 -187
- package/dist/components/core/CardStack/CardStack.theme.d.ts +0 -6
- package/dist/components/core/CardStack/CardStack.theme.js +0 -33
- package/dist/components/core/CardStack/CardStack.types.d.ts +0 -139
- package/dist/components/core/CardStack/index.d.ts +0 -7
- package/dist/components/core/Carousel/Carousel.d.ts +0 -3
- package/dist/components/core/Carousel/Carousel.js +0 -83
- package/dist/components/core/Carousel/Carousel.theme.d.ts +0 -10
- package/dist/components/core/Carousel/Carousel.theme.js +0 -20
- package/dist/components/core/Carousel/Carousel.types.d.ts +0 -113
- package/dist/components/core/Carousel/CarouselBody.d.ts +0 -4
- package/dist/components/core/Carousel/CarouselBody.js +0 -59
- package/dist/components/core/Carousel/CarouselContext.d.ts +0 -3
- package/dist/components/core/Carousel/CarouselContext.js +0 -13
- package/dist/components/core/Carousel/CarouselItem.d.ts +0 -4
- package/dist/components/core/Carousel/CarouselItem.js +0 -11
- package/dist/components/core/Carousel/CarouselNext.d.ts +0 -4
- package/dist/components/core/Carousel/CarouselNext.js +0 -16
- package/dist/components/core/Carousel/CarouselPrevious.d.ts +0 -4
- package/dist/components/core/Carousel/CarouselPrevious.js +0 -16
- package/dist/components/core/Carousel/index.d.ts +0 -3
- package/dist/components/core/Pill/Pill.animations.d.ts +0 -32
- package/dist/components/core/Pill/Pill.animations.js +0 -16
- package/dist/components/effects/ColorPanels/ColorPanels.d.ts +0 -8
- package/dist/components/effects/ColorPanels/ColorPanels.js +0 -66
- package/dist/components/effects/ColorPanels/ColorPanels.shaders.d.ts +0 -12
- package/dist/components/effects/ColorPanels/ColorPanels.shaders.js +0 -218
- package/dist/components/effects/ColorPanels/ColorPanels.types.d.ts +0 -29
- package/dist/components/effects/ColorPanels/ColorPanels.types.js +0 -3
- package/dist/components/effects/ColorPanels/index.d.ts +0 -2
- package/dist/components/effects/FlutedGlass/FlutedGlass.d.ts +0 -9
- package/dist/components/effects/FlutedGlass/FlutedGlass.js +0 -80
- package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.d.ts +0 -12
- package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.js +0 -335
- package/dist/components/effects/FlutedGlass/FlutedGlass.types.d.ts +0 -61
- package/dist/components/effects/FlutedGlass/FlutedGlass.types.js +0 -16
- package/dist/components/effects/FlutedGlass/index.d.ts +0 -3
- package/dist/components/effects/GlassEffect/GlassEffect.d.ts +0 -15
- package/dist/components/effects/GlassEffect/GlassEffect.js +0 -38
- package/dist/components/effects/GlassEffect/GlassEffect.types.d.ts +0 -19
- package/dist/components/effects/GlassEffect/index.d.ts +0 -2
- package/dist/components/effects/GlassSurface/GlassSurface.d.ts +0 -8
- package/dist/components/effects/GlassSurface/GlassSurface.js +0 -250
- package/dist/components/effects/GlassSurface/GlassSurface.types.d.ts +0 -66
- package/dist/components/effects/GlassSurface/index.d.ts +0 -2
- package/dist/components/effects/GodRays/GodRays.d.ts +0 -8
- package/dist/components/effects/GodRays/GodRays.js +0 -68
- package/dist/components/effects/GodRays/GodRays.shaders.d.ts +0 -10
- package/dist/components/effects/GodRays/GodRays.shaders.js +0 -128
- package/dist/components/effects/GodRays/GodRays.types.d.ts +0 -25
- package/dist/components/effects/GodRays/GodRays.types.js +0 -3
- package/dist/components/effects/GodRays/index.d.ts +0 -2
- package/dist/components/effects/GridPattern/GridPattern.d.ts +0 -18
- package/dist/components/effects/GridPattern/GridPattern.js +0 -65
- package/dist/components/effects/GridPattern/GridPattern.types.d.ts +0 -47
- package/dist/components/effects/GridPattern/index.d.ts +0 -2
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.d.ts +0 -10
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.js +0 -78
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.d.ts +0 -22
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.js +0 -239
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.types.d.ts +0 -52
- package/dist/components/effects/HalftoneCmyk/index.d.ts +0 -2
- package/dist/components/effects/HalftoneDots/HalftoneDots.d.ts +0 -9
- package/dist/components/effects/HalftoneDots/HalftoneDots.js +0 -68
- package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.d.ts +0 -13
- package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.js +0 -296
- package/dist/components/effects/HalftoneDots/HalftoneDots.types.d.ts +0 -43
- package/dist/components/effects/HalftoneDots/HalftoneDots.types.js +0 -12
- package/dist/components/effects/HalftoneDots/index.d.ts +0 -3
- package/dist/components/effects/ImageDithering/ImageDithering.d.ts +0 -9
- package/dist/components/effects/ImageDithering/ImageDithering.js +0 -68
- package/dist/components/effects/ImageDithering/ImageDithering.shaders.d.ts +0 -12
- package/dist/components/effects/ImageDithering/ImageDithering.shaders.js +0 -117
- package/dist/components/effects/ImageDithering/ImageDithering.types.d.ts +0 -30
- package/dist/components/effects/ImageDithering/ImageDithering.types.js +0 -8
- package/dist/components/effects/ImageDithering/index.d.ts +0 -3
- package/dist/components/effects/MagneticElement/MagneticElement.d.ts +0 -30
- package/dist/components/effects/MagneticElement/MagneticElement.js +0 -111
- package/dist/components/effects/MagneticElement/MagneticElement.types.d.ts +0 -44
- package/dist/components/effects/MagneticElement/index.d.ts +0 -2
- package/dist/components/effects/Metaballs/Metaballs.d.ts +0 -8
- package/dist/components/effects/Metaballs/Metaballs.js +0 -59
- package/dist/components/effects/Metaballs/Metaballs.shaders.d.ts +0 -10
- package/dist/components/effects/Metaballs/Metaballs.shaders.js +0 -102
- package/dist/components/effects/Metaballs/Metaballs.types.d.ts +0 -16
- package/dist/components/effects/Metaballs/Metaballs.types.js +0 -3
- package/dist/components/effects/Metaballs/index.d.ts +0 -2
- package/dist/components/effects/PaperTexture/PaperTexture.d.ts +0 -9
- package/dist/components/effects/PaperTexture/PaperTexture.js +0 -61
- package/dist/components/effects/PaperTexture/PaperTexture.shaders.d.ts +0 -22
- package/dist/components/effects/PaperTexture/PaperTexture.shaders.js +0 -145
- package/dist/components/effects/PaperTexture/PaperTexture.types.d.ts +0 -19
- package/dist/components/effects/PaperTexture/index.d.ts +0 -2
- package/dist/components/effects/PulsingBorder/PulsingBorder.d.ts +0 -27
- package/dist/components/effects/PulsingBorder/PulsingBorder.js +0 -174
- package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.d.ts +0 -14
- package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.js +0 -258
- package/dist/components/effects/PulsingBorder/PulsingBorder.types.d.ts +0 -75
- package/dist/components/effects/PulsingBorder/PulsingBorder.types.js +0 -3
- package/dist/components/effects/PulsingBorder/index.d.ts +0 -2
- package/dist/components/effects/SmokeRing/SmokeRing.d.ts +0 -8
- package/dist/components/effects/SmokeRing/SmokeRing.js +0 -62
- package/dist/components/effects/SmokeRing/SmokeRing.shaders.d.ts +0 -14
- package/dist/components/effects/SmokeRing/SmokeRing.shaders.js +0 -130
- package/dist/components/effects/SmokeRing/SmokeRing.types.d.ts +0 -22
- package/dist/components/effects/SmokeRing/SmokeRing.types.js +0 -3
- package/dist/components/effects/SmokeRing/index.d.ts +0 -2
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.d.ts +0 -9
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.js +0 -59
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.d.ts +0 -14
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.js +0 -129
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.d.ts +0 -23
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.js +0 -3
- package/dist/components/effects/StaticGradientMesh/index.d.ts +0 -2
- package/dist/components/effects/Water/Water.d.ts +0 -9
- package/dist/components/effects/Water/Water.js +0 -65
- package/dist/components/effects/Water/Water.shaders.d.ts +0 -11
- package/dist/components/effects/Water/Water.shaders.js +0 -123
- package/dist/components/effects/Water/Water.types.d.ts +0 -25
- package/dist/components/effects/Water/index.d.ts +0 -2
- package/dist/components/effects/shared/bayerMatrices.glsl.d.ts +0 -10
- package/dist/components/effects/shared/bayerMatrices.glsl.js +0 -44
- package/dist/components/effects/shared/imageUV.glsl.d.ts +0 -12
- package/dist/components/effects/shared/imageUV.glsl.js +0 -26
- package/dist/components/forms/RichTextEditor/RichTextEditor.animations.d.ts +0 -7
- package/dist/components/forms/RichTextEditor/RichTextEditor.animations.js +0 -32
- package/dist/utils/calendarUtils.d.ts +0 -60
- /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.d.ts +0 -0
- /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.theme.d.ts +0 -0
- /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.theme.js +0 -0
- /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.types.d.ts +0 -0
- /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltipContent.d.ts +0 -0
- /package/dist/components/{charts → core}/shared/ChartTooltip/index.d.ts +0 -0
|
@@ -3,13 +3,12 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import { cn } from '../../../utils/cn.js';
|
|
4
4
|
import { useDrawerContext } from './DrawerContext.js';
|
|
5
5
|
import { Button } from '../Button/Button.js';
|
|
6
|
-
import 'react';
|
|
7
|
-
import { XMarkIcon } from '@heroicons/react/24/outline';
|
|
6
|
+
import { X } from '@phosphor-icons/react';
|
|
8
7
|
|
|
9
8
|
const DrawerHeader = ({ children, icon, showCloseButton, className, ...props }) => {
|
|
10
9
|
const { onClose, showCloseButton: contextShowCloseButton, theme, } = useDrawerContext();
|
|
11
10
|
const shouldShowCloseButton = showCloseButton !== null && showCloseButton !== void 0 ? showCloseButton : contextShowCloseButton;
|
|
12
|
-
return (jsxs("div", { className: cn(theme.header, className), ...props, children: [jsxs("div", { className: cn(theme.headerContent), children: [icon && (jsx("div", { className: "flex-shrink-0 text-[var(--color-text-secondary)]", children: icon })), jsx("div", { className: "flex-1 min-w-0", children: children })] }), shouldShowCloseButton && (jsx(Button, { color: "
|
|
11
|
+
return (jsxs("div", { className: cn(theme.header, className), ...props, children: [jsxs("div", { className: cn(theme.headerContent), children: [icon && (jsx("div", { className: "flex-shrink-0 text-[var(--color-text-secondary)]", children: icon })), jsx("div", { className: "flex-1 min-w-0", children: children })] }), shouldShowCloseButton && (jsx(Button, { color: "mono", variant: "outline", iconOnly: true, size: "sm", onClick: onClose, "aria-label": "Close drawer", className: "rounded-full shrink-0", children: jsx(X, { className: "size-4" }) }))] }));
|
|
13
12
|
};
|
|
14
13
|
DrawerHeader.displayName = "Drawer.Header";
|
|
15
14
|
|
|
@@ -4,7 +4,9 @@ const dropdownTheme = {
|
|
|
4
4
|
// Menu container - similar to Popover but with menu-specific styling.
|
|
5
5
|
// bg + shadow come from the relative-elevation engine (surfaceClasses) at runtime so
|
|
6
6
|
// a nested menu lifts above its host; keep the frosted blur + border + radius here.
|
|
7
|
-
|
|
7
|
+
// max-w caps runaway labels so MenuItem's `truncate` can engage (an unbounded
|
|
8
|
+
// menu can never ellipsize — it just stretches to fit the longest row).
|
|
9
|
+
menuStyle: "min-w-[200px] max-w-[20rem] max-h-[400px] overflow-y-auto rounded-[var(--dropdown-radius)] border border-[var(--color-border)] backdrop-blur-md focus:outline-none flex disabled:cursor-not-allowed gap-0.5",
|
|
8
10
|
// Delegate item styles to shared MenuItem theme
|
|
9
11
|
itemBaseStyle: menuItemTheme.baseStyle,
|
|
10
12
|
itemDangerStyle: menuItemTheme.dangerStyle,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import React__default, { useCallback } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { Check } from '@phosphor-icons/react';
|
|
5
5
|
import { cn } from '../../../utils/cn.js';
|
|
6
6
|
import { useDropdownContext } from './DropdownContext.js';
|
|
7
7
|
import { MenuItem } from '../MenuItem/MenuItem.js';
|
|
@@ -63,7 +63,7 @@ const DropdownItem = React__default.forwardRef(({ itemKey, children, className,
|
|
|
63
63
|
: "menuitem";
|
|
64
64
|
// Build end content: user's endContent OR selection checkmark
|
|
65
65
|
const resolvedEndContent = endContent ||
|
|
66
|
-
(selectionMode !== "none" ? (jsx("div", { className: cn("flex items-center justify-center flex-shrink-0 w-5 h-5"), children: isSelected && (jsx(
|
|
66
|
+
(selectionMode !== "none" ? (jsx("div", { className: cn("flex items-center justify-center flex-shrink-0 w-5 h-5"), children: isSelected && (jsx(Check, { className: "size-4 text-[var(--color-text-secondary)]" })) })) : undefined);
|
|
67
67
|
return (jsx(MenuItem, { ref: ref, role: itemRole, disabled: disabled, isDanger: isDanger, startContent: startContent, endContent: resolvedEndContent, subtitle: subtitle, shortcut: shortcut, onActivate: handleActivate, selected: isSelected, ...(selectionMode !== "none" ? { "aria-checked": isSelected } : {}), className: className, theme: {
|
|
68
68
|
baseStyle: theme.itemBaseStyle,
|
|
69
69
|
dangerStyle: theme.itemDangerStyle,
|
|
@@ -141,12 +141,22 @@ const DropdownMenu = React__default.forwardRef(({ children, className, animation
|
|
|
141
141
|
((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
|
|
142
142
|
return;
|
|
143
143
|
}
|
|
144
|
-
// Ignore clicks that land inside
|
|
145
|
-
// Select/Tooltip/Dropdown/Popover renders to document.body,
|
|
146
|
-
// menu's own DOM subtree — without this it would count as
|
|
147
|
-
// click and dismiss the menu). See the `data-flikkui-portal`
|
|
148
|
-
// (CLAUDE.md §11) — mirrors PopoverBody's bail.
|
|
149
|
-
|
|
144
|
+
// Ignore clicks that land inside a DESCENDANT FlikkUI overlay portal (a
|
|
145
|
+
// nested Select/Tooltip/Dropdown/Popover renders to document.body,
|
|
146
|
+
// outside our menu's own DOM subtree — without this it would count as
|
|
147
|
+
// an outside click and dismiss the menu). See the `data-flikkui-portal`
|
|
148
|
+
// convention (CLAUDE.md §11) — mirrors PopoverBody's bail.
|
|
149
|
+
//
|
|
150
|
+
// The bail only protects against a DESCENDANT portal, not an ANCESTOR
|
|
151
|
+
// one: when this menu's own trigger lives inside another overlay (e.g.
|
|
152
|
+
// a Dropdown opened from inside a Modal), a click on that host
|
|
153
|
+
// overlay's body content also matches `closest("[data-flikkui-portal]")`
|
|
154
|
+
// — it finds the Modal's portal wrapper, which contains our trigger.
|
|
155
|
+
// That's a real outside click and must still close the menu. Only bail
|
|
156
|
+
// when the matched portal does NOT contain our trigger — i.e. it's a
|
|
157
|
+
// portal we opened ourselves, not the one hosting us.
|
|
158
|
+
const portalEl = (_c = (_b = e.target) === null || _b === void 0 ? void 0 : _b.closest) === null || _c === void 0 ? void 0 : _c.call(_b, "[data-flikkui-portal]");
|
|
159
|
+
if (portalEl && !portalEl.contains(triggerRef.current)) {
|
|
150
160
|
return;
|
|
151
161
|
}
|
|
152
162
|
onOpenChange(false);
|
|
@@ -209,7 +219,12 @@ const DropdownMenu = React__default.forwardRef(({ children, className, animation
|
|
|
209
219
|
});
|
|
210
220
|
// Extract DOM props to avoid type conflicts with Framer Motion
|
|
211
221
|
const { onAnimationStart, onAnimationEnd, onDrag, onDragStart, onDragEnd, ...domProps } = props;
|
|
212
|
-
const menuContent = (jsx(AnimatePresence, { children: isOpen && (jsx(motion.div, { ref: handleRef, className: cn("fixed z-50", surfaceClasses(surfaceLevel, { translucent: true }), theme.menuStyle,
|
|
222
|
+
const menuContent = (jsx(AnimatePresence, { children: isOpen && (jsx(motion.div, { ref: handleRef, className: cn("fixed z-50", surfaceClasses(surfaceLevel, { translucent: true }), theme.menuStyle,
|
|
223
|
+
// --dropdown-padding (not a literal p-1): it also feeds
|
|
224
|
+
// --dropdown-inner-radius, which rounds the first/last row.
|
|
225
|
+
horizontal
|
|
226
|
+
? "flex-row p-[var(--dropdown-padding)]"
|
|
227
|
+
: "flex-col p-[var(--dropdown-padding)]", className), style: {
|
|
213
228
|
...cssVariables,
|
|
214
229
|
top: `${position.top}px`,
|
|
215
230
|
left: `${position.left}px`,
|
|
@@ -13,8 +13,14 @@ import { useDropdownContext } from './DropdownContext.js';
|
|
|
13
13
|
* `data-state` (idle/loading), clobbering the open flag — `aria-expanded` is the reliable hook.
|
|
14
14
|
*
|
|
15
15
|
* Injected FIRST in the className merge, so a consumer's own `className` on the trigger child
|
|
16
|
-
* always wins (shadcn override model).
|
|
17
|
-
*
|
|
16
|
+
* always wins (shadcn override model).
|
|
17
|
+
*
|
|
18
|
+
* 🔴 Applied ONLY to non-`Button` triggers. A `Button` is a complete, self-styled component
|
|
19
|
+
* (its own hover/active/variant states), and a *filled* Button hovers via a `brightness` filter
|
|
20
|
+
* rather than a `hover:bg-*`, so this translucent tint would have nothing to override and would
|
|
21
|
+
* replace the Button's solid fill on hover/open (a filled trigger going see-through). Buttons
|
|
22
|
+
* therefore keep their own styling; this convenience tint is for plain/custom trigger elements
|
|
23
|
+
* that have no interaction state of their own.
|
|
18
24
|
*/
|
|
19
25
|
const triggerInteractionStyle = "hover:bg-[var(--color-surface-hover)] hover:text-[var(--color-text-primary)] " +
|
|
20
26
|
"dark:hover:bg-[var(--color-surface-hover)] " +
|
|
@@ -23,12 +29,17 @@ const triggerInteractionStyle = "hover:bg-[var(--color-surface-hover)] hover:tex
|
|
|
23
29
|
* DropdownTrigger component - wraps the trigger element
|
|
24
30
|
*/
|
|
25
31
|
const DropdownTrigger = ({ children, className }) => {
|
|
26
|
-
var _a;
|
|
32
|
+
var _a, _b;
|
|
27
33
|
const { isOpen, onOpenChange, triggerRef, menuId } = useDropdownContext();
|
|
28
34
|
const handleClick = useCallback(() => {
|
|
29
35
|
onOpenChange(!isOpen);
|
|
30
36
|
}, [isOpen, onOpenChange]);
|
|
31
37
|
const childElement = children;
|
|
38
|
+
// A Button trigger brings its own complete interaction styling — don't inject
|
|
39
|
+
// the default tint over it (it would override a filled Button's fill). See the
|
|
40
|
+
// note on triggerInteractionStyle above.
|
|
41
|
+
const isButtonChild = React__default.isValidElement(childElement) &&
|
|
42
|
+
((_a = childElement.type) === null || _a === void 0 ? void 0 : _a.displayName) === "Button";
|
|
32
43
|
// Clone the child element and add our props
|
|
33
44
|
const trigger = React__default.cloneElement(childElement, {
|
|
34
45
|
ref: (el) => {
|
|
@@ -56,8 +67,8 @@ const DropdownTrigger = ({ children, className }) => {
|
|
|
56
67
|
"aria-controls": isOpen ? menuId : undefined,
|
|
57
68
|
"data-state": isOpen ? "open" : "closed",
|
|
58
69
|
// Default interaction style first → child's own className (and the Trigger's
|
|
59
|
-
// `className` prop) override it.
|
|
60
|
-
className: cn(triggerInteractionStyle, (
|
|
70
|
+
// `className` prop) override it. Skipped for Button children (they self-style).
|
|
71
|
+
className: cn(!isButtonChild && triggerInteractionStyle, (_b = childElement.props) === null || _b === void 0 ? void 0 : _b.className, className),
|
|
61
72
|
});
|
|
62
73
|
return trigger;
|
|
63
74
|
};
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
const heroCardTheme = {
|
|
2
|
-
// Shares
|
|
3
|
-
|
|
2
|
+
// Shares --card-radius (HeroCard is a Card presentation, not a distinct
|
|
3
|
+
// container) — a consumer overrides per-instance via `className`, same as
|
|
4
|
+
// every other component (shadcn override pattern).
|
|
5
|
+
// Gradient runs on the primary scale so it follows the app theme.
|
|
6
|
+
baseStyle: "relative overflow-hidden rounded-[var(--card-radius)] p-10 text-[var(--color-primary-contrast)] bg-gradient-to-br from-[var(--color-primary-600)] via-[var(--color-primary-700)] to-[var(--color-primary-500)] ring-4 ring-[var(--color-primary)]/20 ",
|
|
4
7
|
imageStyle: "absolute inset-0 z-0 pointer-events-none bg-cover",
|
|
5
8
|
contentStyle: "relative z-10",
|
|
6
9
|
};
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
const kbdTheme = {
|
|
5
5
|
baseStyle: 'inline-flex items-center justify-center leading-none font-sans font-medium rounded-[calc(var(--radius-base)*0.75)] bg-[var(--color-surface-raised)] border border-[var(--color-border)] text-[var(--color-text-secondary)]',
|
|
6
|
+
// px tokenised (--kbd-px-*) so a theme can widen keycaps; height/min-width
|
|
7
|
+
// stay the fixed keycap size (h-5/h-6) and radius derives from --radius-base.
|
|
6
8
|
sizes: {
|
|
7
|
-
sm: 'text-xs px-
|
|
8
|
-
md: 'text-xs px-
|
|
9
|
+
sm: 'text-xs px-[var(--kbd-px-sm)] min-w-5 h-5',
|
|
10
|
+
md: 'text-xs px-[var(--kbd-px-md)] min-w-6 h-6',
|
|
9
11
|
},
|
|
10
12
|
separatorStyle: 'text-[var(--color-text-muted)] text-xs',
|
|
11
13
|
};
|
|
@@ -14,18 +14,20 @@ import { cn } from '../../../utils/cn.js';
|
|
|
14
14
|
// Resting link look (transparent; underline grows in on hover via the motion
|
|
15
15
|
// span below). Kept minimal and open.
|
|
16
16
|
const LINK_BASE = "relative inline-flex items-center justify-center gap-2 bg-transparent border-transparent cursor-pointer " +
|
|
17
|
-
"transition-colors duration-
|
|
17
|
+
"transition-colors duration-[var(--motion-duration-slow)] ease-in-out " +
|
|
18
18
|
"focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2";
|
|
19
19
|
// Animated underline — a bottom-anchored line that scales in from the left on
|
|
20
20
|
// hover/focus. `bg-current` inherits each color variant's text tint.
|
|
21
|
-
|
|
21
|
+
// `-bottom-px` offsets the line 1px below the text so it doesn't crowd the
|
|
22
|
+
// descenders — the pseudo-underline equivalent of `text-underline-offset`.
|
|
23
|
+
const LINK_UNDERLINE = "pointer-events-none absolute -bottom-px left-0 h-px w-full bg-current";
|
|
22
24
|
const UNDERLINE_VARIANTS = { rest: { scaleX: 0 }, hover: { scaleX: 1 } };
|
|
23
25
|
// Text tint per semantic color — the one thing `color` drives.
|
|
24
26
|
const LINK_COLORS = {
|
|
25
|
-
|
|
27
|
+
mono: "text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] " +
|
|
26
28
|
"focus-visible:outline-[var(--color-text-secondary)] dark:text-[var(--color-text-primary)]",
|
|
27
|
-
primary: "text-[var(--color-primary
|
|
28
|
-
"dark:text-[var(--color-primary
|
|
29
|
+
primary: "text-[var(--color-primary)] " +
|
|
30
|
+
"dark:text-[var(--color-primary)]",
|
|
29
31
|
success: "text-[var(--color-success-600)] focus-visible:outline-[var(--color-success-600)] " +
|
|
30
32
|
"dark:text-[var(--color-success-300)]",
|
|
31
33
|
warning: "text-[var(--color-warning-600)] focus-visible:outline-[var(--color-warning-600)] " +
|
|
@@ -19,7 +19,7 @@ const masonryTheme = {
|
|
|
19
19
|
},
|
|
20
20
|
// Animation classes
|
|
21
21
|
animations: {
|
|
22
|
-
transition: "transition-[left,top,width,height] duration-
|
|
22
|
+
transition: "transition-[left,top,width,height] duration-[var(--motion-duration-slower)] ease-in-out",
|
|
23
23
|
enter: "opacity-0 scale-95",
|
|
24
24
|
exit: "opacity-100 scale-100",
|
|
25
25
|
},
|
|
@@ -3,6 +3,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import React__default, { useState, useCallback } from 'react';
|
|
4
4
|
import { cn } from '../../../utils/cn.js';
|
|
5
5
|
import { menuItemTheme } from './MenuItem.theme.js';
|
|
6
|
+
import { Ripple } from '../shared/Ripple.js';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* MenuItem - Shared base component for menu items used by Dropdown and ContextMenu.
|
|
@@ -47,7 +48,7 @@ const MenuItem = React__default.forwardRef(({ children, className, startContent,
|
|
|
47
48
|
// Focus fill composites over any state (incl. selected) — see focusedStyle note.
|
|
48
49
|
isFocused && !disabled && theme.focusedStyle, isDanger && theme.dangerStyle, theme.focusStyle, className), onClick: handleClick, onKeyDown: handleKeyDown, onFocus: () => setIsFocused(true), onBlur: () => setIsFocused(false), ...props, children: [startContent && (jsx("div", { className: "flex items-center justify-center flex-shrink-0", children: startContent })), jsxs("div", { className: "flex-1 min-w-0", children: [jsxs("div", { className: "flex items-center justify-between gap-2", children: [jsx("span", { className: "truncate", children: children }), shortcut && (jsx("span", { className: "ml-auto flex-shrink-0", children: shortcut }))] }), subtitle && (typeof subtitle === 'string'
|
|
49
50
|
? jsx("div", { className: theme.subtitleStyle, children: subtitle })
|
|
50
|
-
: subtitle)] }), endContent && (jsx("div", { className: "flex items-center justify-center ml-2", children: endContent }))] }));
|
|
51
|
+
: subtitle)] }), endContent && (jsx("div", { className: "flex items-center justify-center ml-2", children: endContent })), jsx(Ripple, { disabled: disabled })] }));
|
|
51
52
|
});
|
|
52
53
|
MenuItem.displayName = "MenuItem";
|
|
53
54
|
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
const menuItemTheme = {
|
|
2
2
|
// Structural base only — layout, spacing, radius, transition. No state colors:
|
|
3
3
|
// those are resolved in JS (see `states`) so a consumer `className` always wins.
|
|
4
|
-
|
|
4
|
+
//
|
|
5
|
+
// Radius: interior rows are a flat 4px; the first and last rows meet the panel's
|
|
6
|
+
// own corners, so they take --dropdown-inner-radius — the panel's radius minus its
|
|
7
|
+
// border and padding — which keeps their curve concentric with the panel's instead
|
|
8
|
+
// of bulging past it (same calc model as --segmented-inner-radius).
|
|
9
|
+
// 🔴 The first:/last: variants resolve against DOM SIBLINGS: any wrapper element
|
|
10
|
+
// around a row makes it both first and last of its own subtree and rounds all four
|
|
11
|
+
// corners (see ContextMenuSub, which renders no element for exactly this reason).
|
|
12
|
+
// 🔴 This assumes a --dropdown-radius panel. That holds for every host today —
|
|
13
|
+
// Mention's suggestion popover renders MenuItem rows too, and its panel's
|
|
14
|
+
// --form-dropdown-radius aliases --dropdown-radius for exactly that reason. A host
|
|
15
|
+
// that gives its panel a different radius has to re-derive this row radius with it.
|
|
16
|
+
baseStyle: "relative flex items-center gap-2 px-3 py-1.5 text-sm font-[500] cursor-pointer outline-none select-none first:rounded-t-[var(--dropdown-inner-radius)] last:rounded-b-[var(--dropdown-inner-radius)] rounded-[4px] transition-colors duration-[var(--motion-duration-slow)] mb-px last-of-type:mb-0",
|
|
5
17
|
// State styling resolved in JS to plain utility classes so `className` overrides
|
|
6
18
|
// win (data-[state] variants carry attribute-selector specificity and can't be
|
|
7
19
|
// overridden by a plain className — see Button.theme.ts / NavItem.theme.ts for
|
|
@@ -7,7 +7,7 @@ import { messageTheme } from './Message.theme.js';
|
|
|
7
7
|
import { Avatar } from '../Avatar/Avatar.js';
|
|
8
8
|
import { Button } from '../Button/Button.js';
|
|
9
9
|
import { motion } from 'motion/react';
|
|
10
|
-
import {
|
|
10
|
+
import { Copy, ArrowsClockwise } from '@phosphor-icons/react';
|
|
11
11
|
import { MessageContext } from './MessageContext.js';
|
|
12
12
|
import { MessageAvatar } from './MessageAvatar.js';
|
|
13
13
|
import { MessageBody } from './MessageBody.js';
|
|
@@ -27,6 +27,8 @@ import { MessageDateDivider } from './MessageDateDivider.js';
|
|
|
27
27
|
|
|
28
28
|
const MessageFooter = ({ isStreaming, streamingIndicator, showTimestamp, timestamp, actions, timestampStyle, streamingIndicatorStyle, actionsContainerStyle, variant, }) => {
|
|
29
29
|
if (isStreaming) {
|
|
30
|
+
if (streamingIndicator === false)
|
|
31
|
+
return null;
|
|
30
32
|
return (jsx("div", { className: cn("flex flex-row items-center gap-3 mt-1", variant === "receiver" ? "ml-2" : "mr-3"), children: jsx("div", { className: cn(timestampStyle, streamingIndicatorStyle), children: streamingIndicator || (jsxs(Fragment, { children: [jsx("span", { children: "Typing" }), jsx(motion.span, { animate: { opacity: [0.4, 1, 0.4] }, transition: {
|
|
31
33
|
duration: 1.5,
|
|
32
34
|
repeat: Infinity,
|
|
@@ -119,7 +121,7 @@ const MessageRoot = React__default.forwardRef(({ role, variant: variantProp, con
|
|
|
119
121
|
// Backward compatibility
|
|
120
122
|
variant === "sender" && customTheme.senderTimestampStyle, variant === "receiver" && customTheme.receiverTimestampStyle, variant === "system" && customTheme.systemTimestampStyle);
|
|
121
123
|
// Build default action buttons if needed
|
|
122
|
-
const defaultActionButtons = shouldShowDefaultActions ? (jsxs("div", { className: cn(messageTheme.actionsContainerStyle, customTheme.actionsContainerStyle), children: [onCopy && (jsx(Button, { variant: "ghost", color: "
|
|
124
|
+
const defaultActionButtons = shouldShowDefaultActions ? (jsxs("div", { className: cn(messageTheme.actionsContainerStyle, customTheme.actionsContainerStyle), children: [onCopy && (jsx(Button, { variant: "ghost", color: "mono", size: "sm", iconOnly: true, onClick: onCopy, "aria-label": "Copy message", className: "opacity-40 hover:opacity-100", children: jsx(Copy, { className: "size-4" }) })), onRegenerate && (jsx(Button, { variant: "ghost", color: "mono", size: "sm", iconOnly: true, onClick: onRegenerate, "aria-label": "Regenerate response", className: "opacity-40 hover:opacity-100", children: jsx(ArrowsClockwise, { className: "size-4" }) }))] })) : undefined;
|
|
123
125
|
// Use custom actions if provided, otherwise use default actions
|
|
124
126
|
const finalActions = actions !== null && actions !== void 0 ? actions : defaultActionButtons;
|
|
125
127
|
// Use TypeWriter for streaming receiver/assistant messages with string content (props API)
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
*/
|
|
5
5
|
const messageTheme = {
|
|
6
6
|
// Shared base styles (apply to all variants)
|
|
7
|
-
bubbleBaseStyle: "max-w-[80%] sm:max-w-[85%] rounded-[
|
|
7
|
+
bubbleBaseStyle: "max-w-[80%] sm:max-w-[85%] rounded-[var(--message-bubble-radius)] px-3 py-2 w-fit min-w-fit h-fit",
|
|
8
8
|
containerBaseStyle: "flex items-start gap-3 h-fit text-sm",
|
|
9
|
-
timestampStyle: "text-xs text-[var(--color-text-placeholder)]
|
|
9
|
+
timestampStyle: "text-xs text-[var(--color-text-placeholder)]",
|
|
10
10
|
// Variant-specific modifiers (only differences)
|
|
11
11
|
variants: {
|
|
12
12
|
sender: {
|
|
13
13
|
containerModifier: "flex-row-reverse", // Reverse direction for right alignment
|
|
14
|
-
bubbleStyle: "bg-[var(--color-
|
|
14
|
+
bubbleStyle: "bg-[var(--color-mono-900)] text-[var(--color-mono-100)] " +
|
|
15
15
|
"rounded-tr-xs " +
|
|
16
16
|
// Dark mode - slightly darker gradient for better contrast
|
|
17
17
|
" ",
|
|
@@ -22,13 +22,12 @@ const messageTheme = {
|
|
|
22
22
|
bubbleStyle: " text-[var(--color-text-secondary)] rounded-tl-xs py-0 px-0 " +
|
|
23
23
|
" " +
|
|
24
24
|
// Dark mode - dark background with lighter text
|
|
25
|
-
" " +
|
|
26
25
|
"",
|
|
27
26
|
timestampModifier: "text-left pl-1",
|
|
28
27
|
},
|
|
29
28
|
system: {
|
|
30
29
|
containerModifier: "justify-center", // Center alignment
|
|
31
|
-
bubbleStyle: "bg-[var(--color-background)] text-[var(--color-text-muted)]/80 rounded-[calc(var(--radius-base)*0.75)] px-1 py-0.5 " +
|
|
30
|
+
bubbleStyle: "bg-[var(--color-background)] text-[var(--color-text-muted)]/80 rounded-[min(calc(var(--radius-base)*0.75),var(--surface-radius-cap-xs))] px-1 py-0.5 " +
|
|
32
31
|
"text-xs border-none " +
|
|
33
32
|
// Dark mode
|
|
34
33
|
"",
|
|
@@ -36,8 +35,7 @@ const messageTheme = {
|
|
|
36
35
|
},
|
|
37
36
|
},
|
|
38
37
|
// Feature styles (streaming, actions)
|
|
39
|
-
streamingIndicatorStyle: "flex items-center gap-1 text-[var(--color-text-placeholder)] text-xs
|
|
40
|
-
"dark:text-[var(--color-neutral-500)]",
|
|
38
|
+
streamingIndicatorStyle: "flex items-center gap-1 text-[var(--color-text-placeholder)] text-xs",
|
|
41
39
|
actionsContainerStyle: "flex items-start gap-3",
|
|
42
40
|
// Status styles
|
|
43
41
|
statusStyle: "flex items-center gap-1 text-xs mt-1",
|
|
@@ -48,13 +46,13 @@ const messageTheme = {
|
|
|
48
46
|
statusFailed: "text-[var(--color-danger)]",
|
|
49
47
|
// Attachment styles
|
|
50
48
|
attachmentContainerStyle: "flex flex-col gap-2 mt-2",
|
|
51
|
-
fileStyle: "flex items-center gap-3 rounded-lg border border-[var(--color-border)] bg-[var(--color-
|
|
49
|
+
fileStyle: "flex items-center gap-3 rounded-lg border border-[var(--color-border)] bg-[var(--color-surface)] px-3 py-2.5 text-xs",
|
|
52
50
|
imageStyle: "rounded-lg overflow-hidden max-w-xs",
|
|
53
|
-
audioStyle: "flex items-center gap-3 rounded-lg border border-[var(--color-border)] bg-[var(--color-
|
|
51
|
+
audioStyle: "flex items-center gap-3 rounded-lg border border-[var(--color-border)] bg-[var(--color-surface)] px-3 py-2.5 text-xs",
|
|
54
52
|
linkStyle: "flex flex-col rounded-lg border border-[var(--color-border)] overflow-hidden text-xs max-w-xs",
|
|
55
53
|
// Reactions styles
|
|
56
54
|
reactionsContainerStyle: "flex flex-wrap items-center gap-1.5 mt-1.5",
|
|
57
|
-
reactionPillStyle: "inline-flex items-center gap-1 rounded-full border border-[var(--color-border)] bg-[var(--color-
|
|
55
|
+
reactionPillStyle: "inline-flex items-center gap-1 rounded-full border border-[var(--color-border)] bg-[var(--color-surface)] px-2 py-0.5 text-xs cursor-pointer transition-colors hover:bg-[var(--color-surface-hover)]",
|
|
58
56
|
reactionPillActiveStyle: "border-[var(--color-primary-200)] bg-[var(--color-primary-50)] text-[var(--color-primary)]",
|
|
59
57
|
// Reply/quote styles
|
|
60
58
|
replyStyle: "border-l-2 border-[var(--color-border)] pl-2.5 mb-2 text-xs text-[var(--color-text-muted)]",
|
|
@@ -3,10 +3,10 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import { cn } from '../../../utils/cn.js';
|
|
4
4
|
import 'react';
|
|
5
5
|
import { messageTheme } from './Message.theme.js';
|
|
6
|
-
import {
|
|
6
|
+
import { Play } from '@phosphor-icons/react';
|
|
7
7
|
|
|
8
8
|
const MessageAudio = ({ duration, name, onClick, className, }) => {
|
|
9
|
-
return (jsxs("div", { className: cn(messageTheme.audioStyle, className), children: [jsx("button", { onClick: onClick, className: "flex items-center justify-center size-8 rounded-full bg-[var(--color-primary)] text-[var(--color-primary-contrast)] flex-shrink-0 cursor-pointer", "aria-label": name ? `Play ${name}` : "Play audio", type: "button", children: jsx(
|
|
9
|
+
return (jsxs("div", { className: cn(messageTheme.audioStyle, className), children: [jsx("button", { onClick: onClick, className: "flex items-center justify-center size-8 rounded-full bg-[var(--color-primary)] text-[var(--color-primary-contrast)] flex-shrink-0 cursor-pointer", "aria-label": name ? `Play ${name}` : "Play audio", type: "button", children: jsx(Play, { className: "size-4 ml-0.5" }) }), jsxs("div", { className: "flex flex-col min-w-0 flex-1", children: [name && (jsx("span", { className: "font-medium text-[var(--color-text-primary)] truncate", children: name })), duration && (jsx("span", { className: "text-xs text-[var(--color-text-muted)]", children: duration }))] })] }));
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
export { MessageAudio };
|
|
@@ -3,10 +3,10 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import { cn } from '../../../utils/cn.js';
|
|
4
4
|
import 'react';
|
|
5
5
|
import { messageTheme } from './Message.theme.js';
|
|
6
|
-
import {
|
|
6
|
+
import { File, DownloadSimple } from '@phosphor-icons/react';
|
|
7
7
|
|
|
8
8
|
const MessageFile = ({ name = "File", url, size, onClick, className, }) => {
|
|
9
|
-
const content = (jsxs("div", { className: cn(messageTheme.fileStyle, className), onClick: !url ? onClick : undefined, role: !url && onClick ? "button" : undefined, tabIndex: !url && onClick ? 0 : undefined, children: [jsx(
|
|
9
|
+
const content = (jsxs("div", { className: cn(messageTheme.fileStyle, className), onClick: !url ? onClick : undefined, role: !url && onClick ? "button" : undefined, tabIndex: !url && onClick ? 0 : undefined, children: [jsx(File, { className: "size-5 flex-shrink-0 text-[var(--color-text-muted)]" }), jsxs("div", { className: "flex flex-col min-w-0 flex-1", children: [jsx("span", { className: "font-medium text-[var(--color-text-primary)] truncate", children: name }), size && (jsx("span", { className: "text-xs text-[var(--color-text-muted)]", children: size }))] }), url && (jsx(DownloadSimple, { className: "size-4 flex-shrink-0 text-[var(--color-text-muted)]" }))] }));
|
|
10
10
|
if (url) {
|
|
11
11
|
return (jsx("a", { href: url, download: true, className: "no-underline", "aria-label": `Download ${name}`, children: content }));
|
|
12
12
|
}
|
|
@@ -2,10 +2,10 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { cn } from '../../../utils/cn.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import { messageTheme } from './Message.theme.js';
|
|
5
|
-
import {
|
|
5
|
+
import { Link } from '@phosphor-icons/react';
|
|
6
6
|
|
|
7
7
|
const MessageLink = ({ url, thumbnailUrl, title, description, domain, className, }) => {
|
|
8
|
-
const content = (jsxs("div", { className: cn(messageTheme.linkStyle, className), children: [thumbnailUrl && (jsx("img", { src: thumbnailUrl, alt: title || "Link preview", className: "w-full h-32 object-cover" })), jsxs("div", { className: "px-3 py-2.5 flex flex-col gap-0.5", children: [title && (jsx("span", { className: "font-medium text-[var(--color-text-primary)] line-clamp-1", children: title })), description && (jsx("span", { className: "text-[var(--color-text-muted)] line-clamp-2", children: description })), domain && (jsxs("span", { className: "flex items-center gap-1 text-xs text-[var(--color-text-placeholder)] mt-0.5", children: [jsx(
|
|
8
|
+
const content = (jsxs("div", { className: cn(messageTheme.linkStyle, className), children: [thumbnailUrl && (jsx("img", { src: thumbnailUrl, alt: title || "Link preview", className: "w-full h-32 object-cover" })), jsxs("div", { className: "px-3 py-2.5 flex flex-col gap-0.5", children: [title && (jsx("span", { className: "font-medium text-[var(--color-text-primary)] line-clamp-1", children: title })), description && (jsx("span", { className: "text-[var(--color-text-muted)] line-clamp-2", children: description })), domain && (jsxs("span", { className: "flex items-center gap-1 text-xs text-[var(--color-text-placeholder)] mt-0.5", children: [jsx(Link, { className: "size-3" }), domain] }))] })] }));
|
|
9
9
|
if (url) {
|
|
10
10
|
return (jsx("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: "no-underline", "aria-label": title ? `Open ${title}` : "Open link", children: content }));
|
|
11
11
|
}
|
|
@@ -4,20 +4,20 @@ import { cn } from '../../../utils/cn.js';
|
|
|
4
4
|
import 'react';
|
|
5
5
|
import { messageTheme } from './Message.theme.js';
|
|
6
6
|
import { Link } from '../Link/Link.js';
|
|
7
|
-
import {
|
|
7
|
+
import { WarningCircle, Check, Clock } from '@phosphor-icons/react';
|
|
8
8
|
|
|
9
|
-
const DoubleCheck = ({ className }) => (jsxs("span", { className: cn("inline-flex items-center -space-x-2", className), children: [jsx(
|
|
9
|
+
const DoubleCheck = ({ className }) => (jsxs("span", { className: cn("inline-flex items-center -space-x-2", className), children: [jsx(Check, { className: "size-3.5" }), jsx(Check, { className: "size-3.5" })] }));
|
|
10
10
|
const MessageStatusIndicator = ({ status, readAt, onRetry, className, }) => {
|
|
11
11
|
if (!status)
|
|
12
12
|
return null;
|
|
13
13
|
const statusConfig = {
|
|
14
14
|
sending: {
|
|
15
|
-
icon: jsx(
|
|
15
|
+
icon: jsx(Clock, { className: "size-3.5" }),
|
|
16
16
|
style: messageTheme.statusSending,
|
|
17
17
|
label: "Sending",
|
|
18
18
|
},
|
|
19
19
|
sent: {
|
|
20
|
-
icon: jsx(
|
|
20
|
+
icon: jsx(Check, { className: "size-3.5" }),
|
|
21
21
|
style: messageTheme.statusSent,
|
|
22
22
|
label: "Sent",
|
|
23
23
|
},
|
|
@@ -34,7 +34,7 @@ const MessageStatusIndicator = ({ status, readAt, onRetry, className, }) => {
|
|
|
34
34
|
: "Read",
|
|
35
35
|
},
|
|
36
36
|
failed: {
|
|
37
|
-
icon: jsx(
|
|
37
|
+
icon: jsx(WarningCircle, { className: "size-3.5" }),
|
|
38
38
|
style: messageTheme.statusFailed,
|
|
39
39
|
label: "Failed",
|
|
40
40
|
},
|
|
@@ -5,6 +5,6 @@ import { Variants } from 'motion/react';
|
|
|
5
5
|
export declare const modalOverlayAnimations: Variants;
|
|
6
6
|
/**
|
|
7
7
|
* Modal content animation variants
|
|
8
|
-
*
|
|
8
|
+
* Restrained scale + lift with a matched, responsive exit.
|
|
9
9
|
*/
|
|
10
10
|
export declare const modalContentAnimations: Variants;
|
|
@@ -1,21 +1,39 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import '../../../theme/ThemeContext.js';
|
|
3
3
|
import '../../../theme/SurfaceContext.js';
|
|
4
|
-
import {
|
|
4
|
+
import { easings, springs } from '../../../theme/animations.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Modal overlay animation variants
|
|
8
8
|
*/
|
|
9
|
-
const modalOverlayAnimations =
|
|
9
|
+
const modalOverlayAnimations = {
|
|
10
|
+
initial: { opacity: 0 },
|
|
11
|
+
animate: {
|
|
12
|
+
opacity: 1,
|
|
13
|
+
transition: {
|
|
14
|
+
duration: 0.28,
|
|
15
|
+
ease: easings.easeOut,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
exit: {
|
|
19
|
+
opacity: 0,
|
|
20
|
+
transition: {
|
|
21
|
+
duration: 0.22,
|
|
22
|
+
delay: 0.05,
|
|
23
|
+
ease: easings.easeInOut,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
};
|
|
10
27
|
/**
|
|
11
28
|
* Modal content animation variants
|
|
12
|
-
*
|
|
29
|
+
* Restrained scale + lift with a matched, responsive exit.
|
|
13
30
|
*/
|
|
14
31
|
const modalContentAnimations = {
|
|
15
32
|
initial: {
|
|
16
33
|
opacity: 0,
|
|
17
|
-
scale: 0.
|
|
18
|
-
y:
|
|
34
|
+
scale: 0.975,
|
|
35
|
+
y: 10,
|
|
36
|
+
transformOrigin: "50% 45%",
|
|
19
37
|
willChange: "transform, opacity",
|
|
20
38
|
},
|
|
21
39
|
animate: {
|
|
@@ -23,17 +41,38 @@ const modalContentAnimations = {
|
|
|
23
41
|
scale: 1,
|
|
24
42
|
y: 0,
|
|
25
43
|
transition: {
|
|
26
|
-
|
|
27
|
-
|
|
44
|
+
opacity: {
|
|
45
|
+
duration: 0.18,
|
|
46
|
+
delay: 0.07,
|
|
47
|
+
ease: easings.easeOut,
|
|
48
|
+
},
|
|
49
|
+
scale: {
|
|
50
|
+
...springs.premium,
|
|
51
|
+
delay: 0.07,
|
|
52
|
+
},
|
|
53
|
+
y: {
|
|
54
|
+
...springs.premium,
|
|
55
|
+
delay: 0.07,
|
|
56
|
+
},
|
|
28
57
|
},
|
|
29
58
|
},
|
|
30
59
|
exit: {
|
|
31
60
|
opacity: 0,
|
|
32
|
-
scale: 0.
|
|
33
|
-
y:
|
|
61
|
+
scale: 0.985,
|
|
62
|
+
y: 6,
|
|
34
63
|
transition: {
|
|
35
|
-
|
|
36
|
-
|
|
64
|
+
opacity: {
|
|
65
|
+
duration: 0.14,
|
|
66
|
+
ease: easings.easeIn,
|
|
67
|
+
},
|
|
68
|
+
scale: {
|
|
69
|
+
duration: 0.18,
|
|
70
|
+
ease: easings.easeInOut,
|
|
71
|
+
},
|
|
72
|
+
y: {
|
|
73
|
+
duration: 0.18,
|
|
74
|
+
ease: easings.easeInOut,
|
|
75
|
+
},
|
|
37
76
|
},
|
|
38
77
|
},
|
|
39
78
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ModalProps } from "./Modal.types";
|
|
2
2
|
export { ModalContext, useModalContext } from "./ModalContext";
|
|
3
3
|
export declare const Modal: {
|
|
4
|
-
({ isOpen, onClose, size, closeOnOverlayClick, closeOnEsc, showCloseButton, role, children, className, theme: themeOverrides, elevation, lift, ...props }: ModalProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
({ isOpen, onClose, size, closeOnOverlayClick, closeOnEsc, showCloseButton, role, children, className, theme: themeOverrides, elevation, lift, darkMode, ...props }: ModalProps): import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
displayName: string;
|
|
6
6
|
} & {
|
|
7
7
|
Header: {
|
|
@@ -14,7 +14,7 @@ import { ModalBody } from './ModalBody.js';
|
|
|
14
14
|
import { ModalFooter } from './ModalFooter.js';
|
|
15
15
|
import { useSurfaceElevation, SurfaceProvider, surfaceClasses } from '../../../theme/SurfaceContext.js';
|
|
16
16
|
|
|
17
|
-
const ModalRoot = ({ isOpen, onClose, size = "md", closeOnOverlayClick = true, closeOnEsc = true, showCloseButton = true, role = "dialog", children, className, theme: themeOverrides, elevation, lift, ...props }) => {
|
|
17
|
+
const ModalRoot = ({ isOpen, onClose, size = "md", closeOnOverlayClick = true, closeOnEsc = true, showCloseButton = true, role = "dialog", children, className, theme: themeOverrides, elevation, lift, darkMode = false, ...props }) => {
|
|
18
18
|
// Grounded backdrop overlay: a Modal covers the viewport, so it paints a FIXED rung 4
|
|
19
19
|
// regardless of where its <Modal> JSX sits (a Modal declared inside a Card must not
|
|
20
20
|
// inherit the Card's rung). Content inside still lifts relative to the modal.
|
|
@@ -54,7 +54,11 @@ const ModalRoot = ({ isOpen, onClose, size = "md", closeOnOverlayClick = true, c
|
|
|
54
54
|
titleId,
|
|
55
55
|
subtitleId,
|
|
56
56
|
}), [isOpen, onClose, size, isSizeToken, closeOnOverlayClick, closeOnEsc, showCloseButton, theme, isBodyScrollable, setIsBodyScrollable, titleId, subtitleId]);
|
|
57
|
-
return (jsx(Overlay, { isOpen: isOpen, onClose: onClose, closeOnOverlayClick: closeOnOverlayClick, closeOnEsc: closeOnEsc, position: "center", role: role, ariaModal: true, ariaLabelledBy: titleId, ariaDescribedBy: subtitleId, contentClassName: cn(
|
|
57
|
+
return (jsx(Overlay, { isOpen: isOpen, onClose: onClose, closeOnOverlayClick: closeOnOverlayClick, closeOnEsc: closeOnEsc, position: "center", role: role, ariaModal: true, ariaLabelledBy: titleId, ariaDescribedBy: subtitleId, contentClassName: cn(
|
|
58
|
+
// Opaque: the panel sits behind Overlay's dimming scrim, and the blur lives on
|
|
59
|
+
// that scrim — not here. At /80 the scrim tinted the panel gray instead of
|
|
60
|
+
// frosting anything. Matches Drawer, the other backdrop-grounded dialog.
|
|
61
|
+
surfaceClasses(surfaceLevel, { translucent: false, shadow: false }), theme.container, isSizeToken ? modalSizeVariants[size] : size, darkMode && "dark", className), animations: {
|
|
58
62
|
overlay: modalOverlayAnimations,
|
|
59
63
|
content: modalContentAnimations,
|
|
60
64
|
}, ...props, children: jsx(ModalContext.Provider, { value: contextValue, children: jsx(SurfaceProvider, { level: surfaceLevel, children: children }) }) }));
|
|
@@ -4,12 +4,17 @@ const modalTheme = {
|
|
|
4
4
|
// bg comes from the relative-elevation engine (surfaceClasses) at runtime so a modal
|
|
5
5
|
// lifts above its host substrate; keep the dramatic shadow + ring + border + radius here.
|
|
6
6
|
container: "relative w-full max-h-[calc(100vh-2rem)] rounded-[var(--modal-radius)] shadow-2xl shadow-black/30 flex flex-col my-4 min-h-0 overflow-hidden ring-6 !ring-white/10 border border-[var(--color-border)]",
|
|
7
|
-
header: "flex items-start justify-between
|
|
7
|
+
header: "flex items-start justify-between px-[var(--modal-px)] pt-[var(--modal-py)] pb-0 shrink-0 border-b border-transparent gap-6 relative",
|
|
8
8
|
headerContent: "flex flex-col items-start gap-2 flex-1",
|
|
9
|
-
title: "text-
|
|
9
|
+
title: "text-[length:var(--modal-title-size)]/[var(--modal-title-line-height)] font-semibold text-[var(--color-text-primary)]",
|
|
10
10
|
subtitle: "text-sm text-[var(--color-text-secondary)] mt-0.5",
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
// pb-[...*0.75] is the gap before the footer — proportional to --modal-py
|
|
12
|
+
// (today's ratio, 12/16) so a themed --modal-py increase widens it too.
|
|
13
|
+
body: "flex-1 overflow-y-auto px-[var(--modal-px)] pt-[var(--modal-py)] pb-[calc(var(--modal-py)*0.75)]",
|
|
14
|
+
// Footer is deliberately lighter/tighter than header/body — expressed as a
|
|
15
|
+
// proportional calc() off the same tokens (today's ratios: 0.75x/0.5x) so
|
|
16
|
+
// that relationship survives a themed --modal-px/--modal-py override.
|
|
17
|
+
footer: "flex items-center justify-end gap-2 px-[calc(var(--modal-px)*0.75)] py-[calc(var(--modal-py)*0.5)] border-t border-transparent",
|
|
13
18
|
};
|
|
14
19
|
// Size variants for the modal container
|
|
15
20
|
const modalSizeVariants = {
|
|
@@ -3,13 +3,12 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import { cn } from '../../../utils/cn.js';
|
|
4
4
|
import { useModalContext } from './ModalContext.js';
|
|
5
5
|
import { Button } from '../Button/Button.js';
|
|
6
|
-
import 'react';
|
|
7
|
-
import { XMarkIcon } from '@heroicons/react/24/outline';
|
|
6
|
+
import { X } from '@phosphor-icons/react';
|
|
8
7
|
|
|
9
8
|
const ModalHeader = ({ children, icon, showCloseButton, className, ...props }) => {
|
|
10
9
|
const { onClose, showCloseButton: contextShowCloseButton, theme, isBodyScrollable, } = useModalContext();
|
|
11
10
|
const shouldShowCloseButton = showCloseButton !== null && showCloseButton !== void 0 ? showCloseButton : contextShowCloseButton;
|
|
12
|
-
return (jsxs("div", { className: cn(theme.header, isBodyScrollable && "border-[var(--color-border)] relative", className), ...props, children: [jsxs("div", { className: cn(theme.headerContent), children: [icon && (jsx("div", { className: "flex-shrink-0 text-[var(--color-text-secondary)]", children: icon })), jsx("div", { className: "flex-1", children: children })] }), shouldShowCloseButton && (jsx("div", { className: "", children: jsx(Button, { color: "
|
|
11
|
+
return (jsxs("div", { className: cn(theme.header, isBodyScrollable && "border-[var(--color-border)] relative", className), ...props, children: [jsxs("div", { className: cn(theme.headerContent), children: [icon && (jsx("div", { className: "flex-shrink-0 text-[var(--color-text-secondary)]", children: icon })), jsx("div", { className: "flex-1", children: children })] }), shouldShowCloseButton && (jsx("div", { className: "", children: jsx(Button, { color: "mono", variant: "outline", iconOnly: true, size: "sm", onClick: onClose, "aria-label": "Close modal", className: "rounded-full shrink-0", children: jsx(X, { className: "size-4" }) }) }))] }));
|
|
13
12
|
};
|
|
14
13
|
ModalHeader.displayName = "Modal.Header";
|
|
15
14
|
|