@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import {
|
|
3
|
+
import { CaretLeft, CaretRight } from '@phosphor-icons/react';
|
|
4
4
|
import { useReducedMotion, motion, AnimatePresence } from 'motion/react';
|
|
5
5
|
import React__default, { useMemo, useState, useRef, useEffect, useCallback } from 'react';
|
|
6
6
|
import { cn } from '../../../../utils/cn.js';
|
|
@@ -199,7 +199,7 @@ const CalendarMini = React__default.forwardRef(({ selectedDate, currentMonth, on
|
|
|
199
199
|
};
|
|
200
200
|
const MonthRow = enableAnimations ? motion.div : "div";
|
|
201
201
|
const DateItem = enableAnimations ? motion.button : "button";
|
|
202
|
-
return (jsxs("div", { ref: ref, className: cn(mergedTheme.baseStyle, className), role: "region", "aria-label": "Mini calendar", ...rest, children: [jsx(Button, { iconOnly: true, color: "
|
|
202
|
+
return (jsxs("div", { ref: ref, className: cn(mergedTheme.baseStyle, className), role: "region", "aria-label": "Mini calendar", ...rest, children: [jsx(Button, { iconOnly: true, color: "mono", variant: "soft", className: "!flex-shrink !flex-grow-0 !w-fit self-stretch !h-auto !min-h-0 px-0.5", onClick: handlePrevMonth, "aria-label": "Previous month", children: jsx(CaretLeft, { className: "size-5 text-[var(--color-text-primary)]" }) }), jsxs("div", { className: "flex flex-col gap-1 relative", children: [jsxs("div", { className: "flex items-center gap-1", children: [jsx("div", { className: "flex flex-col relative overflow-hidden flex-1", style: {
|
|
203
203
|
maskImage: "linear-gradient(to right, transparent, black 16px, black calc(100% - 16px), transparent)",
|
|
204
204
|
WebkitMaskImage: "linear-gradient(to right, transparent, black 16px, black calc(100% - 16px), transparent)",
|
|
205
205
|
}, children: jsx("div", { ref: monthScrollRef, className: cn(mergedTheme.monthRowStyle), role: "tablist", "aria-label": "Month selection", children: jsx(AnimatePresence, { mode: "popLayout", initial: false, custom: direction, children: jsx(MonthRow, { custom: direction, ...(enableAnimations && {
|
|
@@ -247,7 +247,7 @@ const CalendarMini = React__default.forwardRef(({ selectedDate, currentMonth, on
|
|
|
247
247
|
}), "aria-selected": isSelected, "aria-current": isToday ? "date" : undefined, "aria-disabled": disabled, type: "button", ...(enableAnimations && {
|
|
248
248
|
whileTap: !disabled ? { scale: 0.95 } : undefined,
|
|
249
249
|
}), children: [jsx("div", { className: "text-sm font-medium opacity-60", children: formatDayName(date) }), jsx("time", { dateTime: date.toISOString(), className: cn("font-semibold"), children: formatDateNumber(date) })] }, date.toISOString()));
|
|
250
|
-
}) }, `${startDate.getTime()}-dates`) }) }) })] }), jsx(Button, { iconOnly: true, color: "
|
|
250
|
+
}) }, `${startDate.getTime()}-dates`) }) }) })] }), jsx(Button, { iconOnly: true, color: "mono", variant: "soft", className: "!flex-shrink !flex-grow-0 !w-fit self-stretch !h-auto !min-h-0 px-0.5", onClick: handleNextMonth, "aria-label": "Next month", children: jsx(CaretRight, { className: "size-5 text-[var(--color-text-primary)]" }) })] }));
|
|
251
251
|
});
|
|
252
252
|
CalendarMini.displayName = "CalendarMini";
|
|
253
253
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const calendarMiniTheme = {
|
|
2
|
-
baseStyle: "flex items-center justify-center gap-1 transition-all duration-
|
|
2
|
+
baseStyle: "flex items-center justify-center gap-1 transition-all duration-[var(--motion-duration-slow)] text-sm",
|
|
3
3
|
monthRowStyle: "flex flex-1 gap-4 overflow-x-auto scrollbar-hide scroll-smooth snap-x snap-mandatory px-4 ml-3",
|
|
4
4
|
monthItemStyle: "font-semibold text-[var(--color-text-secondary)] cursor-pointer transition-colors hover:text-[var(--color-text-primary)] flex-shrink-0 snap-center data-[state=active]:text-[var(--color-text-primary)] data-[state=active]:opacity-100",
|
|
5
5
|
dateRowStyle: "relative overflow-hidden px-4 py-0.5",
|
|
6
|
-
dateItemStyle: "px-0 py-1.5 min-w-[50px] flex flex-col items-center rounded-[var(--form-radius)] cursor-pointer transition-all text-[var(--color-text-primary)] hover:bg-[var(--color-surface-hover)] flex-shrink-0 snap-center ring-1 ring-transparent data-[state=selected]:bg-[var(--color-
|
|
6
|
+
dateItemStyle: "px-0 py-1.5 min-w-[50px] flex flex-col items-center rounded-[var(--form-radius)] cursor-pointer transition-all text-[var(--color-text-primary)] hover:bg-[var(--color-surface-hover)] flex-shrink-0 snap-center ring-1 ring-transparent data-[state=selected]:bg-[var(--color-surface)] data-[state=selected]:ring-[var(--color-border)] data-[state=selected]:hover:bg-[var(--color-surface)] data-[state=selected]:z-2 data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed data-[disabled]:hover:bg-[var(--color-surface)]",
|
|
7
7
|
};
|
|
8
8
|
|
|
9
9
|
export { calendarMiniTheme };
|
|
@@ -8,9 +8,10 @@ import { CardTitle } from './CardTitle.js';
|
|
|
8
8
|
import { CardSubtitle } from './CardSubtitle.js';
|
|
9
9
|
import { CardBody } from './CardBody.js';
|
|
10
10
|
import { CardFooter } from './CardFooter.js';
|
|
11
|
+
import { CardContext } from './CardContext.js';
|
|
11
12
|
import { useSurfaceElevation, SurfaceProvider, surfaceClasses } from '../../../theme/SurfaceContext.js';
|
|
12
13
|
|
|
13
|
-
const CardRoot = React__default.forwardRef(({ children, className, theme: customTheme = {}, darkMode = false, title, subtitle, actions, footer, elevation, lift, ...props }, ref) => {
|
|
14
|
+
const CardRoot = React__default.forwardRef(({ children, className, theme: customTheme = {}, darkMode = false, title, subtitle, actions, footer, elevation, lift, inset = false, ...props }, ref) => {
|
|
14
15
|
// Relative elevation: a Card lifts two rungs above its host substrate (base = 3, so a
|
|
15
16
|
// standalone card on the floor reads rung 3). shadow:true (the engine default) supplies the
|
|
16
17
|
// hairline ring + doubling shadow — the ONLY elevation cue in light mode, where rungs 3–8 are
|
|
@@ -20,11 +21,15 @@ const CardRoot = React__default.forwardRef(({ children, className, theme: custom
|
|
|
20
21
|
...cardTheme,
|
|
21
22
|
...customTheme,
|
|
22
23
|
}), [customTheme]);
|
|
24
|
+
const cardContext = useMemo(() => ({ inset }), [inset]);
|
|
23
25
|
const hasHeader = Boolean(title || subtitle || actions);
|
|
24
26
|
// Slot-prop mode: any header/footer slot composes Header/Body/Footer for us.
|
|
25
27
|
// Otherwise children render raw — the compound API path, unchanged.
|
|
26
28
|
const managed = hasHeader || Boolean(footer);
|
|
27
|
-
return (jsx("div", { ref: ref, className: cn(surfaceClasses(surfaceLevel),
|
|
29
|
+
return (jsx("div", { ref: ref, className: cn(surfaceClasses(surfaceLevel),
|
|
30
|
+
// Overrides only the rung bg from surfaceClasses (twMerge, last wins) — its
|
|
31
|
+
// shadow and --field-fill survive, and `className` still wins over both.
|
|
32
|
+
inset && theme.baseStyleInset, theme.baseStyle, darkMode && "dark", className), ...props, children: jsx(CardContext.Provider, { value: cardContext, children: jsx(SurfaceProvider, { level: surfaceLevel, children: managed ? (jsxs(Fragment, { children: [hasHeader && (jsxs(CardHeader, { className: actions ? "flex-row items-start justify-between gap-4" : undefined, children: [(title || subtitle) && (jsxs("div", { className: "flex flex-col", children: [title && jsx(CardTitle, { children: title }), subtitle && jsx(CardSubtitle, { children: subtitle })] })), actions && (jsx("div", { className: "flex items-center gap-2 shrink-0", children: actions }))] })), children != null && jsx(CardBody, { children: children }), footer && jsx(CardFooter, { className: "justify-end gap-2", children: footer })] })) : (children) }) }) }));
|
|
28
33
|
});
|
|
29
34
|
CardRoot.displayName = 'Card';
|
|
30
35
|
// Create compound component with proper typing
|
|
@@ -2,11 +2,47 @@ const cardTheme = {
|
|
|
2
2
|
// bg comes from the relative-elevation engine (surfaceClasses) at runtime so a card
|
|
3
3
|
// nested in a higher surface (e.g. a Modal) lifts; keep radius + overflow + border here.
|
|
4
4
|
baseStyle: "rounded-[var(--card-radius)] overflow-hidden border-0 border-[var(--color-border)]",
|
|
5
|
-
headerStyle: "flex flex-col
|
|
6
|
-
|
|
5
|
+
headerStyle: "flex flex-col px-[var(--card-px)] py-[var(--card-py)] items-start",
|
|
6
|
+
// text-[length:...] (not bare text-[var(...)]) is required — see TYPE ROLE
|
|
7
|
+
// SYSTEM in theme.css for why a bare var() would resolve to color instead.
|
|
8
|
+
titleStyle: "text-[length:var(--card-title-size)]/[var(--card-title-line-height)] font-semibold text-[var(--color-text-primary)]",
|
|
7
9
|
subtitleStyle: "text-sm text-[var(--color-text-secondary)] mt-2",
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
// Default to full py (top included). [[data-card-region]~&]:pt-0 zeroes the seam
|
|
11
|
+
// ONLY when an actual region (Header/Body) precedes this one — a general-sibling
|
|
12
|
+
// selector keyed off data-card-region, not `:first-child`. `:first-child` broke
|
|
13
|
+
// when a decorative absolutely-positioned sibling (e.g. DotPattern) sat before
|
|
14
|
+
// Body in the DOM: it still counts as a structural first child even though it
|
|
15
|
+
// takes no layout space, so Body silently lost its top padding.
|
|
16
|
+
bodyStyle: "px-[var(--card-px)] py-[var(--card-py)] [[data-card-region]~&]:pt-0",
|
|
17
|
+
footerStyle: "flex items-center px-[var(--card-px)] py-[var(--card-py)] [[data-card-region]~&]:pt-0",
|
|
18
|
+
// ── inset mode ─────────────────────────────────────────────────────────────
|
|
19
|
+
// PROTOTYPE GEOMETRY: the 12px gap and the 16px panel radius are hardcoded on
|
|
20
|
+
// purpose so the look can be tuned by eye first. Tokenise both afterwards
|
|
21
|
+
// (--card-inset-gap + a --card-panel-radius on the sm cap tier, per §3's
|
|
22
|
+
// nested-well rule) — this is the only place the numbers appear.
|
|
23
|
+
//
|
|
24
|
+
// The frame sinks rather than the body rising: light-mode rungs 3-8 are all
|
|
25
|
+
// #ffffff, so lifting the body a rung would paint nothing. bg here overrides
|
|
26
|
+
// the rung bg from surfaceClasses via twMerge while its shadow + --field-fill
|
|
27
|
+
// survive; the panel then picks the rung bg back up.
|
|
28
|
+
baseStyleInset: "bg-[var(--color-surface-sunken)]",
|
|
29
|
+
// Header keeps its full top padding; only the seam down to the panel collapses
|
|
30
|
+
// to the gap. `pb-3` lands after `py-[…]` so twMerge resolves the bottom side.
|
|
31
|
+
headerStyleInset: "pb-3",
|
|
32
|
+
// Deliberately NOT carrying bodyStyle's `[[data-card-region]~&]:pt-0` — the
|
|
33
|
+
// panel is a closed box and keeps uniform padding on all four sides.
|
|
34
|
+
//
|
|
35
|
+
// ALIGNMENT CONTRACT: content inside the panel must stay flush with the header
|
|
36
|
+
// and footer text on the tray. The panel is offset by the gap, so its own
|
|
37
|
+
// padding is that gap subtracted from the card padding — 12 + (24-12) = 24,
|
|
38
|
+
// the same inset the header sits at. Derived from --card-px/--card-py rather
|
|
39
|
+
// than hardcoded so it holds when a theme redefines the card padding.
|
|
40
|
+
// The `_` are required: they become spaces, and calc() treats `-` as an operator
|
|
41
|
+
// ONLY when whitespace-separated. `calc(var(--card-px)-12px)` parses as the invalid
|
|
42
|
+
// `var(--card-px) -12px`, which Tailwind silently drops — no class is emitted at all.
|
|
43
|
+
// When these move to tokens, wrap in max(0px, …) so a theme that sets the card
|
|
44
|
+
// padding below the gap can't produce negative padding.
|
|
45
|
+
bodyStyleInset: "mx-3 mb-3 rounded-2xl px-[calc(var(--card-px)_-_12px)] py-[calc(var(--card-py)_-_12px)]",
|
|
10
46
|
};
|
|
11
47
|
|
|
12
48
|
export { cardTheme };
|
|
@@ -7,6 +7,12 @@ export interface CardTheme {
|
|
|
7
7
|
subtitleStyle: string;
|
|
8
8
|
bodyStyle: string;
|
|
9
9
|
footerStyle: string;
|
|
10
|
+
/** Applied on top of `baseStyle` when `inset` — sinks the frame to a tray. */
|
|
11
|
+
baseStyleInset: string;
|
|
12
|
+
/** Applied on top of `headerStyle` when `inset` — collapses the seam to the panel. */
|
|
13
|
+
headerStyleInset: string;
|
|
14
|
+
/** Replaces `bodyStyle` when `inset` — the floating panel. */
|
|
15
|
+
bodyStyleInset: string;
|
|
10
16
|
}
|
|
11
17
|
export interface CardThemeOverrides {
|
|
12
18
|
baseStyle?: string;
|
|
@@ -15,6 +21,9 @@ export interface CardThemeOverrides {
|
|
|
15
21
|
subtitleStyle?: string;
|
|
16
22
|
bodyStyle?: string;
|
|
17
23
|
footerStyle?: string;
|
|
24
|
+
baseStyleInset?: string;
|
|
25
|
+
headerStyleInset?: string;
|
|
26
|
+
bodyStyleInset?: string;
|
|
18
27
|
}
|
|
19
28
|
export interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
20
29
|
/**
|
|
@@ -53,6 +62,17 @@ export interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title">
|
|
|
53
62
|
elevation?: SurfaceElevation;
|
|
54
63
|
/** `false` opts out of the relative lift — paints at the card's base rung. */
|
|
55
64
|
lift?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Sink the card frame to a recessed tray and float the body as its own panel.
|
|
67
|
+
* Header and footer stay on the tray; body content remains flush with them.
|
|
68
|
+
*
|
|
69
|
+
* Works in both API modes — the root broadcasts it, so a compound
|
|
70
|
+
* `<Card.Body>` picks it up without being told twice. Has no effect on raw
|
|
71
|
+
* children (no slot-props and no `Card.Body`), since there is no body region
|
|
72
|
+
* to turn into a panel.
|
|
73
|
+
* @default false
|
|
74
|
+
*/
|
|
75
|
+
inset?: boolean;
|
|
56
76
|
/**
|
|
57
77
|
* Custom class name for the card
|
|
58
78
|
*/
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx } from 'react/jsx-runtime';
|
|
2
3
|
import React__default from 'react';
|
|
3
4
|
import { cn } from '../../../utils/cn.js';
|
|
4
5
|
import { cardTheme } from './Card.theme.js';
|
|
6
|
+
import { useCardContext } from './CardContext.js';
|
|
7
|
+
import { useSurfaceLevel, surfaceClasses } from '../../../theme/SurfaceContext.js';
|
|
5
8
|
|
|
6
9
|
const CardBody = React__default.forwardRef(({ children, className, ...props }, ref) => {
|
|
7
|
-
|
|
10
|
+
const { inset } = useCardContext();
|
|
11
|
+
// The rung the root already computed and re-provided. In inset mode the frame gives
|
|
12
|
+
// that rung up to sink to a tray, so the panel is what paints it — bg, hairline ring
|
|
13
|
+
// and --field-fill all land here instead of on the frame.
|
|
14
|
+
const surfaceLevel = useSurfaceLevel();
|
|
15
|
+
return (jsx("div", { ref: ref, "data-card-region": "", className: cn(inset && surfaceClasses(surfaceLevel), inset ? cardTheme.bodyStyleInset : cardTheme.bodyStyle, className), ...props, children: children }));
|
|
8
16
|
});
|
|
9
17
|
CardBody.displayName = 'Card.Body';
|
|
10
18
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface CardContextValue {
|
|
2
|
+
/** `true` when the root Card is in inset mode (sunken tray + floating body panel). */
|
|
3
|
+
inset: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Lives in its own module (not `Card.tsx`) so the sub-components can read it without
|
|
7
|
+
* importing the root — the zero-circular-dependency rule in CLAUDE.md §23.
|
|
8
|
+
*
|
|
9
|
+
* Defaults to `inset: false` so a bare `<Card.Body>` used outside a `<Card>` (which the
|
|
10
|
+
* existing API allows) keeps rendering exactly as it does today.
|
|
11
|
+
*/
|
|
12
|
+
export declare const CardContext: import("react").Context<CardContextValue>;
|
|
13
|
+
export declare const useCardContext: () => CardContextValue;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Lives in its own module (not `Card.tsx`) so the sub-components can read it without
|
|
6
|
+
* importing the root — the zero-circular-dependency rule in CLAUDE.md §23.
|
|
7
|
+
*
|
|
8
|
+
* Defaults to `inset: false` so a bare `<Card.Body>` used outside a `<Card>` (which the
|
|
9
|
+
* existing API allows) keeps rendering exactly as it does today.
|
|
10
|
+
*/
|
|
11
|
+
const CardContext = createContext({ inset: false });
|
|
12
|
+
const useCardContext = () => useContext(CardContext);
|
|
13
|
+
|
|
14
|
+
export { CardContext, useCardContext };
|
|
@@ -4,7 +4,7 @@ import { cn } from '../../../utils/cn.js';
|
|
|
4
4
|
import { cardTheme } from './Card.theme.js';
|
|
5
5
|
|
|
6
6
|
const CardFooter = React__default.forwardRef(({ children, className, ...props }, ref) => {
|
|
7
|
-
return (jsx("div", { ref: ref, className: cn(cardTheme.footerStyle, className), ...props, children: children }));
|
|
7
|
+
return (jsx("div", { ref: ref, "data-card-region": "", className: cn(cardTheme.footerStyle, className), ...props, children: children }));
|
|
8
8
|
});
|
|
9
9
|
CardFooter.displayName = 'CardFooter';
|
|
10
10
|
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx } from 'react/jsx-runtime';
|
|
2
3
|
import React__default from 'react';
|
|
3
4
|
import { cn } from '../../../utils/cn.js';
|
|
4
5
|
import { cardTheme } from './Card.theme.js';
|
|
6
|
+
import { useCardContext } from './CardContext.js';
|
|
5
7
|
|
|
6
8
|
const CardHeader = React__default.forwardRef(({ children, className, ...props }, ref) => {
|
|
7
|
-
|
|
9
|
+
const { inset } = useCardContext();
|
|
10
|
+
return (jsx("div", { ref: ref, "data-card-region": "", className: cn(cardTheme.headerStyle, inset && cardTheme.headerStyleInset, className), ...props, children: children }));
|
|
8
11
|
});
|
|
9
12
|
CardHeader.displayName = 'CardHeader';
|
|
10
13
|
|
|
@@ -5,7 +5,7 @@ import { commandPaletteTheme } from './CommandPalette.theme.js';
|
|
|
5
5
|
import { containerAnimations, overlayAnimations } from './CommandPalette.animations.js';
|
|
6
6
|
import { cn } from '../../../utils/cn.js';
|
|
7
7
|
import { useSurfaceElevation, SurfaceProvider, surfaceClasses } from '../../../theme/SurfaceContext.js';
|
|
8
|
-
import {
|
|
8
|
+
import { MagnifyingGlass } from '@phosphor-icons/react';
|
|
9
9
|
import { CommandItem } from './CommandItem.js';
|
|
10
10
|
import { Overlay } from '../../effects/Overlay/Overlay.js';
|
|
11
11
|
import { ScrollArea } from '../ScrollArea/ScrollArea.js';
|
|
@@ -107,7 +107,7 @@ const findNextEnabledIndex = (currentIndex, direction, commands) => {
|
|
|
107
107
|
* />
|
|
108
108
|
* ```
|
|
109
109
|
*/
|
|
110
|
-
const CommandPalette = React__default.forwardRef(({ isOpen, onClose, commands = [], placeholder = "Type a command or search...", emptyMessage = "No results found.", maxHeight = "400px", className = "", overlayClassName = "", theme: themeOverrides, grouped = false, onSearchChange, filterFunction = defaultFilterFunction, closeOnOverlayClick = true, closeOnEsc = true, footer, footerClassName, elevation, lift, }, ref) => {
|
|
110
|
+
const CommandPalette = React__default.forwardRef(({ isOpen, onClose, commands = [], placeholder = "Type a command or search...", emptyMessage = "No results found.", maxHeight = "400px", className = "", overlayClassName = "", theme: themeOverrides, grouped = false, onSearchChange, filterFunction = defaultFilterFunction, closeOnOverlayClick = true, closeOnEsc = true, footer, footerClassName, elevation, lift, onCommandSelect, }, ref) => {
|
|
111
111
|
// Grounded backdrop overlay: the palette covers the viewport over a backdrop, so it
|
|
112
112
|
// paints a FIXED rung 5 regardless of where its JSX sits. Content inside lifts relative.
|
|
113
113
|
const surfaceLevel = useSurfaceElevation({ baseRung: 5, ground: true, elevation, lift });
|
|
@@ -190,8 +190,9 @@ const CommandPalette = React__default.forwardRef(({ isOpen, onClose, commands =
|
|
|
190
190
|
if (command.disabled)
|
|
191
191
|
return;
|
|
192
192
|
command.onSelect();
|
|
193
|
+
onCommandSelect === null || onCommandSelect === void 0 ? void 0 : onCommandSelect(command.id);
|
|
193
194
|
onClose();
|
|
194
|
-
}, [onClose]);
|
|
195
|
+
}, [onClose, onCommandSelect]);
|
|
195
196
|
// Keep refs in sync for keydown handler to avoid re-attaching listener
|
|
196
197
|
const flatFilteredCommandsRef = useRef(flatFilteredCommands);
|
|
197
198
|
flatFilteredCommandsRef.current = flatFilteredCommands;
|
|
@@ -258,7 +259,7 @@ const CommandPalette = React__default.forwardRef(({ isOpen, onClose, commands =
|
|
|
258
259
|
return (jsx(Overlay, { ref: ref, isOpen: isOpen, onClose: onClose, closeOnOverlayClick: closeOnOverlayClick, closeOnEsc: closeOnEsc, position: "top", overlayClassName: cn(theme.overlay, overlayClassName), contentClassName: cn(surfaceClasses(surfaceLevel, { translucent: true, shadow: false }), theme.container, className), animations: {
|
|
259
260
|
overlay: overlayAnimations,
|
|
260
261
|
content: containerAnimations,
|
|
261
|
-
}, children: jsxs(SurfaceProvider, { level: surfaceLevel, children: [jsx("div", { className: theme.searchWrapper, children: jsxs("div", { className: "flex items-center gap-3", children: [jsx(
|
|
262
|
+
}, children: jsxs(SurfaceProvider, { level: surfaceLevel, children: [jsx("div", { className: theme.searchWrapper, children: jsxs("div", { className: "flex items-center gap-3", children: [jsx(MagnifyingGlass, { className: "w-5 h-5 text-[var(--color-text-muted)]", weight: "bold" }), jsx("input", { ref: searchInputRef, type: "text", className: theme.searchInput, placeholder: placeholder, value: searchValue, onChange: handleSearchChange, autoComplete: "off", autoCorrect: "off", spellCheck: false, "aria-label": "Search commands" })] }) }), jsx(ScrollArea, { ref: listContainerRef, type: "hover", className: "overscroll-contain px-1", style: {
|
|
262
263
|
maxHeight: typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight,
|
|
263
264
|
}, children: jsx("div", { role: "listbox", "aria-label": "Commands", children: renderCommandsList() }) }), footer && (jsx("div", { className: cn(theme.footer, footerClassName), children: footer }))] }) }));
|
|
264
265
|
});
|
|
@@ -16,15 +16,11 @@ const commandPaletteTheme = {
|
|
|
16
16
|
searchWrapper: "border-b border-[var(--color-border)] px-4 py-3 " + "",
|
|
17
17
|
searchInput: "w-full px-0 py-0 text-sm bg-transparent border-none outline-none " +
|
|
18
18
|
"text-[var(--color-text-primary)] placeholder:text-[var(--color-text-placeholder)] " +
|
|
19
|
-
"focus:outline-none focus:ring-0
|
|
20
|
-
|
|
21
|
-
"dark:text-[var(--color-text-primary)] dark:placeholder:text-[var(--color-neutral-500)]",
|
|
22
|
-
groupLabel: "px-4 py-1 text-xs font-semibold text-[var(--color-text-muted)]/50 uppercase " +
|
|
23
|
-
"dark:text-[var(--color-neutral-500)]",
|
|
19
|
+
"focus:outline-none focus:ring-0",
|
|
20
|
+
groupLabel: "px-4 py-1 text-xs font-semibold text-[var(--color-text-muted)]/50 uppercase",
|
|
24
21
|
// Command rows render via the shared MenuItem primitive and use its default
|
|
25
22
|
// styling (subtle highlight + standard padding) — no per-row theme here.
|
|
26
|
-
emptyState: "px-4 py-12 text-center text-sm text-[var(--color-text-muted)]
|
|
27
|
-
"dark:text-[var(--color-neutral-500)]",
|
|
23
|
+
emptyState: "px-4 py-12 text-center text-sm text-[var(--color-text-muted)]",
|
|
28
24
|
footer: "border-t border-[var(--color-border)] px-4 py-2 text-xs text-[var(--color-text-muted)]font-medium",
|
|
29
25
|
};
|
|
30
26
|
|
|
@@ -79,6 +79,8 @@ export interface CommandPaletteProps {
|
|
|
79
79
|
elevation?: SurfaceElevation;
|
|
80
80
|
/** `false` opts out of the relative lift — paints at the palette's base rung. */
|
|
81
81
|
lift?: boolean;
|
|
82
|
+
/** Fired with the selected command's id, in addition to that command's own onSelect. */
|
|
83
|
+
onCommandSelect?: (id: string) => void;
|
|
82
84
|
}
|
|
83
85
|
/**
|
|
84
86
|
* Theme overrides for the CommandPalette component
|
|
@@ -3,8 +3,9 @@ import { dropdownTheme } from '../Dropdown/Dropdown.theme.js';
|
|
|
3
3
|
const contextMenuTheme = {
|
|
4
4
|
// Inherit all Dropdown styles for consistency
|
|
5
5
|
...dropdownTheme,
|
|
6
|
-
// Content uses the same styling as Dropdown menu
|
|
7
|
-
|
|
6
|
+
// Content uses the same styling as Dropdown menu. The padding is the token, not a
|
|
7
|
+
// literal p-1 — it also feeds --dropdown-inner-radius (the first/last row's corner).
|
|
8
|
+
contentStyle: dropdownTheme.menuStyle.replace("flex", "flex-col p-[var(--dropdown-padding)]"),
|
|
8
9
|
// Items use exact same styling as Dropdown items.
|
|
9
10
|
itemStyle: dropdownTheme.itemBaseStyle,
|
|
10
11
|
// Checked tick — sits in the leading icon slot (same gutter as startContent icons),
|
|
@@ -17,7 +18,7 @@ const contextMenuTheme = {
|
|
|
17
18
|
// bg + shadow come from the relative-elevation engine (surfaceClasses) at
|
|
18
19
|
// runtime so the submenu lifts above its parent menu; keep blur + border here.
|
|
19
20
|
subContentStyle: "min-w-[180px] max-h-[400px] overflow-y-auto rounded-[var(--dropdown-radius)] border border-[var(--color-border)] ml-1 " +
|
|
20
|
-
"backdrop-blur-md flex flex-col p-
|
|
21
|
+
"backdrop-blur-md flex flex-col p-[var(--dropdown-padding)] focus:outline-none",
|
|
21
22
|
// Separator - horizontal divider (--color-border flips for dark on its own)
|
|
22
23
|
separatorStyle: "h-px bg-[var(--color-border)] my-1 -mx-1",
|
|
23
24
|
// Label - section header (matches Dropdown section title)
|
|
@@ -16,6 +16,14 @@ export interface SubMenuContextValue {
|
|
|
16
16
|
isOpen: boolean;
|
|
17
17
|
onOpenChange: (isOpen: boolean) => void;
|
|
18
18
|
triggerRef: React.RefObject<HTMLDivElement | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Cancel a pending close. The trigger and the submenu body are separate DOM
|
|
21
|
+
* subtrees (the body portals to `document.body`), so hovering either one has to
|
|
22
|
+
* call this to survive the hand-off across the gap between them.
|
|
23
|
+
*/
|
|
24
|
+
cancelClose: () => void;
|
|
25
|
+
/** Start the short grace period before the submenu closes. */
|
|
26
|
+
scheduleClose: () => void;
|
|
19
27
|
}
|
|
20
28
|
export interface ContextMenuProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
21
29
|
children: ReactNode;
|
|
@@ -54,7 +62,6 @@ export interface ContextMenuItemProps extends Omit<React.HTMLAttributes<HTMLDivE
|
|
|
54
62
|
}
|
|
55
63
|
export interface ContextMenuSubProps {
|
|
56
64
|
children: ReactNode;
|
|
57
|
-
className?: string;
|
|
58
65
|
}
|
|
59
66
|
export interface ContextMenuSubTriggerProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
60
67
|
children: ReactNode;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
3
|
import React__default, { useCallback } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { Check } from '@phosphor-icons/react';
|
|
5
5
|
import { useContextMenuContext } from './ContextMenuContext.js';
|
|
6
6
|
import { MenuItem } from '../MenuItem/MenuItem.js';
|
|
7
7
|
|
|
@@ -22,7 +22,7 @@ const ContextMenuItem = React__default.forwardRef(({ children, className, checke
|
|
|
22
22
|
// with icon rows AND the label never shifts when toggled — a `size-4` spacer holds
|
|
23
23
|
// the gutter while unchecked.
|
|
24
24
|
const isCheckable = checked !== undefined;
|
|
25
|
-
const checkIndicator = isCheckable ? (checked ? (jsx(
|
|
25
|
+
const checkIndicator = isCheckable ? (checked ? (jsx(Check, { className: theme.itemCheckedStyle, "aria-hidden": "true" })) : (jsx("span", { className: "size-4 shrink-0", "aria-hidden": "true" }))) : null;
|
|
26
26
|
const resolvedStartContent = checkIndicator || startContent ? (jsxs(Fragment, { children: [checkIndicator, startContent] })) : undefined;
|
|
27
27
|
// Build end content: user's endContent OR shortcut display
|
|
28
28
|
const resolvedEndContent = endContent ||
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { ContextMenuSubProps } from "./ContextMenu.types";
|
|
3
3
|
/**
|
|
4
|
-
* ContextMenuSub - Wrapper for nested submenu with hover logic
|
|
4
|
+
* ContextMenuSub - Wrapper for nested submenu with hover logic.
|
|
5
|
+
*
|
|
6
|
+
* Renders NO element of its own: the sub-trigger has to stay a direct sibling of the
|
|
7
|
+
* surrounding ContextMenu.Item rows, because MenuItem expresses its corner radius with
|
|
8
|
+
* `first:`/`last:` variants and those resolve against DOM siblings. Wrapping the trigger
|
|
9
|
+
* made it both the first AND the last child of that wrapper, so a mid-list sub-trigger
|
|
10
|
+
* rounded all four corners at --radius-base instead of the flat 4px its neighbours use.
|
|
11
|
+
*
|
|
12
|
+
* Hover coordination therefore lives here instead of on a wrapper's mouse handlers: the
|
|
13
|
+
* trigger and the (portalled) submenu body each cancel a pending close on enter and
|
|
14
|
+
* schedule one on leave, so the pointer can cross the gap between them.
|
|
5
15
|
*/
|
|
6
16
|
export declare const ContextMenuSub: React.FC<ContextMenuSubProps>;
|
|
@@ -1,40 +1,53 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useState, useRef, useCallback, useMemo } from 'react';
|
|
3
|
+
import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
|
|
4
4
|
import { SubMenuContext } from './ContextMenuContext.js';
|
|
5
5
|
|
|
6
|
+
/** Grace period before a hovered-away submenu closes, in ms. */
|
|
7
|
+
const CLOSE_DELAY = 150;
|
|
6
8
|
/**
|
|
7
|
-
* ContextMenuSub - Wrapper for nested submenu with hover logic
|
|
9
|
+
* ContextMenuSub - Wrapper for nested submenu with hover logic.
|
|
10
|
+
*
|
|
11
|
+
* Renders NO element of its own: the sub-trigger has to stay a direct sibling of the
|
|
12
|
+
* surrounding ContextMenu.Item rows, because MenuItem expresses its corner radius with
|
|
13
|
+
* `first:`/`last:` variants and those resolve against DOM siblings. Wrapping the trigger
|
|
14
|
+
* made it both the first AND the last child of that wrapper, so a mid-list sub-trigger
|
|
15
|
+
* rounded all four corners at --radius-base instead of the flat 4px its neighbours use.
|
|
16
|
+
*
|
|
17
|
+
* Hover coordination therefore lives here instead of on a wrapper's mouse handlers: the
|
|
18
|
+
* trigger and the (portalled) submenu body each cancel a pending close on enter and
|
|
19
|
+
* schedule one on leave, so the pointer can cross the gap between them.
|
|
8
20
|
*/
|
|
9
|
-
const ContextMenuSub = ({ children
|
|
21
|
+
const ContextMenuSub = ({ children }) => {
|
|
10
22
|
const [isOpen, setIsOpen] = useState(false);
|
|
11
23
|
const triggerRef = useRef(null);
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const handleMouseEnter = useCallback(() => {
|
|
18
|
-
if (hoverTimeoutRef.current) {
|
|
19
|
-
clearTimeout(hoverTimeoutRef.current);
|
|
20
|
-
hoverTimeoutRef.current = null;
|
|
24
|
+
const closeTimeoutRef = useRef(null);
|
|
25
|
+
const cancelClose = useCallback(() => {
|
|
26
|
+
if (closeTimeoutRef.current) {
|
|
27
|
+
clearTimeout(closeTimeoutRef.current);
|
|
28
|
+
closeTimeoutRef.current = null;
|
|
21
29
|
}
|
|
22
30
|
}, []);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
hoverTimeoutRef.current = setTimeout(() => {
|
|
31
|
+
const scheduleClose = useCallback(() => {
|
|
32
|
+
cancelClose();
|
|
33
|
+
closeTimeoutRef.current = setTimeout(() => {
|
|
34
|
+
closeTimeoutRef.current = null;
|
|
29
35
|
setIsOpen(false);
|
|
30
|
-
},
|
|
31
|
-
}, []);
|
|
36
|
+
}, CLOSE_DELAY);
|
|
37
|
+
}, [cancelClose]);
|
|
38
|
+
const handleOpenChange = useCallback((value) => {
|
|
39
|
+
cancelClose();
|
|
40
|
+
setIsOpen(value);
|
|
41
|
+
}, [cancelClose]);
|
|
42
|
+
useEffect(() => cancelClose, [cancelClose]);
|
|
32
43
|
const contextValue = useMemo(() => ({
|
|
33
44
|
isOpen,
|
|
34
45
|
onOpenChange: handleOpenChange,
|
|
35
46
|
triggerRef,
|
|
36
|
-
|
|
37
|
-
|
|
47
|
+
cancelClose,
|
|
48
|
+
scheduleClose,
|
|
49
|
+
}), [isOpen, handleOpenChange, cancelClose, scheduleClose]);
|
|
50
|
+
return (jsx(SubMenuContext.Provider, { value: contextValue, children: children }));
|
|
38
51
|
};
|
|
39
52
|
ContextMenuSub.displayName = "ContextMenuSub";
|
|
40
53
|
|
|
@@ -15,7 +15,7 @@ const ContextMenuSubBody = React__default.forwardRef(({ children, className, ani
|
|
|
15
15
|
// Relative elevation: lift above the parent menu surface (overlay base = 5).
|
|
16
16
|
const surfaceLevel = useSurfaceElevation({ baseRung: 5, offset: 2, elevation, lift });
|
|
17
17
|
const { theme } = useContextMenuContext();
|
|
18
|
-
const { isOpen, triggerRef, onOpenChange } = useSubMenuContext();
|
|
18
|
+
const { isOpen, triggerRef, onOpenChange, cancelClose, scheduleClose } = useSubMenuContext();
|
|
19
19
|
const shouldReduceMotion = useReducedMotion();
|
|
20
20
|
const isClient = useIsClient();
|
|
21
21
|
const localRef = useRef(null);
|
|
@@ -88,7 +88,18 @@ const ContextMenuSubBody = React__default.forwardRef(({ children, className, ani
|
|
|
88
88
|
},
|
|
89
89
|
};
|
|
90
90
|
// Extract DOM props to avoid conflicts
|
|
91
|
-
const { onAnimationStart, onAnimationEnd, onDrag, onDragStart, onDragEnd, ...domProps } = props;
|
|
91
|
+
const { onAnimationStart, onAnimationEnd, onDrag, onDragStart, onDragEnd, onMouseEnter, onMouseLeave, ...domProps } = props;
|
|
92
|
+
// The body portals to <body>, so it is not a DOM descendant of the trigger: entering it
|
|
93
|
+
// has to cancel the close the trigger scheduled when the pointer left, and leaving it
|
|
94
|
+
// has to schedule one. Consumer handlers are composed, not replaced.
|
|
95
|
+
const handleMouseEnter = useCallback((e) => {
|
|
96
|
+
cancelClose();
|
|
97
|
+
onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter(e);
|
|
98
|
+
}, [cancelClose, onMouseEnter]);
|
|
99
|
+
const handleMouseLeave = useCallback((e) => {
|
|
100
|
+
scheduleClose();
|
|
101
|
+
onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave(e);
|
|
102
|
+
}, [scheduleClose, onMouseLeave]);
|
|
92
103
|
// Detect dark mode from document
|
|
93
104
|
const isDarkMode = typeof document !== "undefined" &&
|
|
94
105
|
(document.documentElement.classList.contains("dark") ||
|
|
@@ -103,7 +114,7 @@ const ContextMenuSubBody = React__default.forwardRef(({ children, className, ani
|
|
|
103
114
|
type: "spring",
|
|
104
115
|
stiffness: 500,
|
|
105
116
|
damping: 30,
|
|
106
|
-
}, "data-state": isOpen ? "open" : "closed", "data-flikkui-portal": "", ...domProps, children: jsx(SurfaceProvider, { level: surfaceLevel, children: children }) })) }));
|
|
117
|
+
}, "data-state": isOpen ? "open" : "closed", "data-flikkui-portal": "", onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, ...domProps, children: jsx(SurfaceProvider, { level: surfaceLevel, children: children }) })) }));
|
|
107
118
|
// Always use portal for submenus
|
|
108
119
|
const portalTarget = isClient ? document.body : null;
|
|
109
120
|
return portalTarget ? createPortal(submenuContent, portalTarget) : null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import React__default, { useRef, useCallback } from 'react';
|
|
4
|
-
import {
|
|
3
|
+
import React__default, { useRef, useCallback, useEffect } from 'react';
|
|
4
|
+
import { CaretRight } from '@phosphor-icons/react';
|
|
5
5
|
import { cn } from '../../../utils/cn.js';
|
|
6
6
|
import { useContextMenuContext, useSubMenuContext } from './ContextMenuContext.js';
|
|
7
7
|
|
|
@@ -10,21 +10,34 @@ import { useContextMenuContext, useSubMenuContext } from './ContextMenuContext.j
|
|
|
10
10
|
*/
|
|
11
11
|
const ContextMenuSubTrigger = React__default.forwardRef(({ children, className, disabled = false, startContent, ...props }, ref) => {
|
|
12
12
|
const { theme } = useContextMenuContext();
|
|
13
|
-
const { isOpen, onOpenChange, triggerRef } = useSubMenuContext();
|
|
13
|
+
const { isOpen, onOpenChange, triggerRef, cancelClose, scheduleClose } = useSubMenuContext();
|
|
14
14
|
const hoverTimeoutRef = useRef(null);
|
|
15
|
+
const clearOpenTimeout = useCallback(() => {
|
|
16
|
+
if (hoverTimeoutRef.current) {
|
|
17
|
+
clearTimeout(hoverTimeoutRef.current);
|
|
18
|
+
hoverTimeoutRef.current = null;
|
|
19
|
+
}
|
|
20
|
+
}, []);
|
|
15
21
|
// Handle mouse enter - open submenu after short delay
|
|
16
22
|
const handleMouseEnter = useCallback(() => {
|
|
17
23
|
if (disabled)
|
|
18
24
|
return;
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
25
|
+
// Re-entering the trigger cancels a close scheduled by leaving the submenu body.
|
|
26
|
+
cancelClose();
|
|
27
|
+
clearOpenTimeout();
|
|
23
28
|
// Open submenu after short delay
|
|
24
29
|
hoverTimeoutRef.current = setTimeout(() => {
|
|
30
|
+
hoverTimeoutRef.current = null;
|
|
25
31
|
onOpenChange(true);
|
|
26
32
|
}, 150);
|
|
27
|
-
}, [disabled, onOpenChange]);
|
|
33
|
+
}, [disabled, onOpenChange, cancelClose, clearOpenTimeout]);
|
|
34
|
+
// Handle mouse leave - hand off to the submenu body, which cancels the close if the
|
|
35
|
+
// pointer lands there; otherwise the submenu closes after the grace period.
|
|
36
|
+
const handleMouseLeave = useCallback(() => {
|
|
37
|
+
clearOpenTimeout();
|
|
38
|
+
scheduleClose();
|
|
39
|
+
}, [clearOpenTimeout, scheduleClose]);
|
|
40
|
+
useEffect(() => clearOpenTimeout, [clearOpenTimeout]);
|
|
28
41
|
// Handle keyboard navigation
|
|
29
42
|
const handleKeyDown = useCallback((e) => {
|
|
30
43
|
if (disabled)
|
|
@@ -54,7 +67,7 @@ const ContextMenuSubTrigger = React__default.forwardRef(({ children, className,
|
|
|
54
67
|
ref.current = el;
|
|
55
68
|
}
|
|
56
69
|
}, [ref, triggerRef]);
|
|
57
|
-
return (jsxs("div", { ref: handleRef, role: "menuitem", "aria-haspopup": "true", "aria-expanded": isOpen, "aria-disabled": disabled, "data-state": isOpen ? "open" : "closed", "data-disabled": disabled, tabIndex: disabled ? undefined : -1, className: cn(theme.subTriggerStyle, theme.itemFocusStyle, className), onMouseEnter: handleMouseEnter, onKeyDown: handleKeyDown, ...props, children: [startContent && (jsx("div", { className: "flex items-center justify-center flex-shrink-0", children: startContent })), jsx("span", { className: "flex-1 truncate", children: children }), jsx(
|
|
70
|
+
return (jsxs("div", { ref: handleRef, role: "menuitem", "aria-haspopup": "true", "aria-expanded": isOpen, "aria-disabled": disabled, "data-state": isOpen ? "open" : "closed", "data-disabled": disabled, tabIndex: disabled ? undefined : -1, className: cn(theme.subTriggerStyle, theme.itemFocusStyle, className), onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onKeyDown: handleKeyDown, ...props, children: [startContent && (jsx("div", { className: "flex items-center justify-center flex-shrink-0", children: startContent })), jsx("span", { className: "flex-1 truncate", children: children }), jsx(CaretRight, { className: "absolute right-2 top-1/2 -translate-y-1/2 size-3 text-[var(--color-text-secondary)]", "aria-hidden": "true", weight: "bold" })] }));
|
|
58
71
|
});
|
|
59
72
|
ContextMenuSubTrigger.displayName = "ContextMenuSubTrigger";
|
|
60
73
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const dragDropTheme = {
|
|
2
|
-
draggableStyle: 'select-none rounded-[var(--radius-base)] transition-all duration-
|
|
3
|
-
droppableStyle: 'min-h-[120px] border-2 border-dashed border-[var(--color-border)] rounded-[var(--radius-base)] p-4 transition-all duration-
|
|
2
|
+
draggableStyle: 'select-none rounded-[var(--radius-base)] transition-all duration-[var(--motion-duration-base)]',
|
|
3
|
+
droppableStyle: 'min-h-[120px] border-2 border-dashed border-[var(--color-border)] rounded-[var(--radius-base)] p-4 transition-all duration-[var(--motion-duration-base)] bg-[var(--color-background)]',
|
|
4
4
|
dragOverStyle: 'border-[var(--color-primary)] bg-[var(--color-primary-50)]',
|
|
5
5
|
dragPreviewStyle: 'opacity-60',
|
|
6
6
|
};
|
|
@@ -8,12 +8,15 @@ const drawerTheme = {
|
|
|
8
8
|
"flex flex-col overflow-hidden rounded-[var(--drawer-radius)] " +
|
|
9
9
|
"dark:ring-white/5",
|
|
10
10
|
inner: "h-full flex flex-col",
|
|
11
|
-
header: "flex items-start justify-between
|
|
11
|
+
header: "flex items-start justify-between px-[var(--drawer-px)] py-[var(--drawer-py)] border-b border-[var(--color-border)] shrink-0 text-[var(--color-text-primary)] gap-4",
|
|
12
12
|
headerContent: "flex items-start gap-3 flex-1 min-w-0",
|
|
13
|
-
title: "text-
|
|
13
|
+
title: "text-[length:var(--drawer-title-size)]/[var(--drawer-title-line-height)] font-semibold text-[var(--color-text-primary)]",
|
|
14
14
|
subtitle: "text-sm text-[var(--color-text-secondary)] mt-0.5",
|
|
15
|
-
body: "flex-1 overflow-y-auto
|
|
16
|
-
|
|
15
|
+
body: "flex-1 overflow-y-auto px-[var(--drawer-px)] py-[var(--drawer-py)]",
|
|
16
|
+
// Footer's vertical padding is deliberately lighter than header/body —
|
|
17
|
+
// proportional calc() off --drawer-py (today's ratio, 12/16) so it stays
|
|
18
|
+
// in that same relationship under a themed override; horizontal matches.
|
|
19
|
+
footer: "flex items-center justify-end gap-3 px-[var(--drawer-px)] py-[calc(var(--drawer-py)*0.75)] border-t border-[var(--color-border)] shrink-0 " +
|
|
17
20
|
"",
|
|
18
21
|
};
|
|
19
22
|
// Position variants with margin support
|