@flikk/ui 1.0.0-beta.31 → 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 +295 -22
- 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/CodeBlock/CodeBlock.theme.js +1 -1
- package/dist/components/ai/PromptInput/PromptInput.js +2 -2
- package/dist/components/ai/PromptInput/PromptInput.theme.js +2 -2
- package/dist/components/ai/PromptSuggestion/PromptSuggestion.theme.js +2 -2
- package/dist/components/ai/Reasoning/Reasoning.js +27 -3
- 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 +58 -5
- 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 +2 -1
- package/dist/components/ai/StreamingResponse/AnimatedText.d.ts +7 -0
- package/dist/components/ai/StreamingResponse/AnimatedText.js +8 -7
- 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 +13 -7
- 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.theme.js +1 -1
- package/dist/components/ai/index.d.ts +3 -2
- package/dist/components/ai/index.js +4 -0
- package/dist/components/canvas/BaseNode.js +1 -1
- package/dist/components/canvas/CanvasToolbar.js +0 -1
- package/dist/components/canvas/Edge.js +2 -2
- package/dist/components/canvas/NodeControls.js +0 -1
- package/dist/components/canvas/NodeRenderer.js +2 -2
- package/dist/components/charts/ActivityRings/ActivityRings.js +2 -2
- package/dist/components/charts/ActivityRings/ActivityRings.theme.js +1 -1
- package/dist/components/charts/AreaChart/AreaChart.js +3 -3
- package/dist/components/charts/AreaChart/AreaChart.theme.js +3 -3
- package/dist/components/charts/BarChart/BarChart.js +4 -4
- package/dist/components/charts/ComboChart/BarRenderer.js +2 -2
- package/dist/components/charts/ComboChart/BarRenderer.types.d.ts +1 -1
- package/dist/components/charts/ComboChart/ComboChartCanvas.js +1 -1
- package/dist/components/charts/ComboChart/LineRenderer.js +1 -1
- 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.js +1 -1
- package/dist/components/charts/LineChart/LineChart.js +2 -2
- package/dist/components/charts/LollipopChart/LollipopChart.js +1 -1
- package/dist/components/charts/RadarChart/RadarChart.js +1 -1
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +3 -3
- package/dist/components/charts/hooks/useChartAccessibility.js +9 -6
- package/dist/components/charts/index.d.ts +4 -8
- package/dist/components/charts/index.js +2 -4
- 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 +3 -3
- package/dist/components/charts/utils/animation-utils.d.ts +12 -7
- package/dist/components/charts/utils/animation-utils.js +19 -19
- package/dist/components/core/Accordion/Accordion.theme.js +1 -1
- package/dist/components/core/Alert/Alert.animations.d.ts +11 -4
- package/dist/components/core/Alert/Alert.animations.js +11 -4
- package/dist/components/core/Alert/Alert.js +16 -2
- 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.theme.js +1 -1
- package/dist/components/core/Badge/Badge.animations.d.ts +0 -5
- package/dist/components/core/Badge/Badge.animations.js +5 -84
- package/dist/components/core/Badge/Badge.d.ts +7 -4
- package/dist/components/core/Badge/Badge.js +27 -64
- package/dist/components/core/Badge/Badge.theme.js +8 -12
- package/dist/components/core/Badge/Badge.types.d.ts +18 -34
- package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.js +4 -4
- package/dist/components/core/Button/Button.js +7 -43
- package/dist/components/core/Button/Button.theme.js +2 -2
- package/dist/components/core/Button/Button.types.d.ts +8 -12
- package/dist/components/core/Button/index.d.ts +0 -2
- package/dist/components/core/Calendar/Calendar.theme.js +1 -1
- 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 +29 -1
- 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/CardHeader.js +4 -1
- 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/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 +21 -8
- package/dist/components/core/DragDrop/DragDrop.theme.js +2 -2
- package/dist/components/core/Drawer/Drawer.theme.js +1 -1
- package/dist/components/core/Drawer/DrawerHeader.js +0 -1
- package/dist/components/core/Dropdown/DropdownMenu.js +22 -7
- package/dist/components/core/Link/Link.js +1 -1
- 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 +2 -0
- package/dist/components/core/Message/Message.theme.js +3 -3
- 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.js +5 -1
- package/dist/components/core/Modal/Modal.theme.js +1 -1
- package/dist/components/core/Modal/ModalHeader.js +0 -1
- package/dist/components/core/ModalStack/ModalStackModal.js +3 -1
- package/dist/components/core/NavItem/NavItem.js +3 -2
- package/dist/components/core/NavItem/NavItem.theme.js +1 -1
- package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +4 -2
- package/dist/components/core/PageHeading/PageHeading.theme.js +1 -1
- package/dist/components/core/Pagination/Pagination.theme.js +2 -2
- package/dist/components/core/Pill/Pill.js +2 -1
- package/dist/components/core/Pill/Pill.theme.js +4 -2
- 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.theme.js +1 -1
- 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 +3 -3
- 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/SidebarContent.js +1 -1
- package/dist/components/core/Sidebar/SidebarHeader.js +1 -1
- package/dist/components/core/Sidebar/SidebarSearch.js +2 -2
- package/dist/components/core/Sidebar/SidebarToggle.js +1 -1
- package/dist/components/core/Sidebar/SidebarUserProfile.js +1 -1
- 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.theme.js +1 -1
- package/dist/components/core/Toast/ToastProvider.js +1 -1
- 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/data-display/GanttChart/GanttChart.theme.js +6 -6
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +1 -1
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +1 -1
- package/dist/components/data-display/GanttChart/GanttToolbar.js +0 -1
- package/dist/components/data-display/KPI/KPI.js +11 -20
- package/dist/components/data-display/KPI/KPI.theme.js +8 -4
- package/dist/components/data-display/Metric/Metric.theme.js +4 -4
- package/dist/components/data-display/Table/Table.theme.js +2 -2
- package/dist/components/data-display/Table/TableColumnManager.js +1 -2
- package/dist/components/data-display/Table/TableContext.js +1 -0
- package/dist/components/data-display/Table/TableFilter.js +9 -2
- package/dist/components/data-display/Table/TableSelectionHeader.js +1 -1
- package/dist/components/data-display/Timeline/Timeline.theme.js +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.d.ts +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.js +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.theme.js +4 -4
- 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.theme.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPickerHeader.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPickerImage.js +1 -1
- package/dist/components/forms/Combobox/Combobox.js +2 -0
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +1 -1
- package/dist/components/forms/DateRangePicker/DateRangePickerContext.js +1 -0
- package/dist/components/forms/FileUpload/FileUpload.theme.js +2 -2
- package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +1 -1
- package/dist/components/forms/InputAddress/InputAddress.types.d.ts +2 -2
- package/dist/components/forms/Radio/Radio.theme.js +1 -1
- package/dist/components/forms/RichTextEditor/RichTextEditor.d.ts +12 -16
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +165 -1680
- 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.js +4 -4
- package/dist/components/forms/Select/Select.types.d.ts +70 -7
- 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.js +2 -1
- package/dist/components/forms/SelectableCard/SelectableCard.theme.js +1 -1
- package/dist/components/forms/Switch/Switch.theme.js +2 -2
- package/dist/components/forms/TimePicker/TimePicker.theme.js +1 -1
- package/dist/components/forms/TimePicker/TimePickerTrigger.js +1 -1
- package/dist/components/forms/forms.theme.js +19 -5
- package/dist/components/forms/index.js +1 -0
- 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 +10 -10
- package/dist/components/generative/schema.generated.js +178 -292
- 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 +178 -292
- package/dist/index.js +1 -4
- package/dist/registry.json +2599 -2375
- package/dist/shadcn-compat.css +5 -5
- 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/themes/precision.css +232 -0
- package/dist/tools.json +179 -294
- package/dist/utils/index.d.ts +0 -1
- package/package.json +31 -1
- package/src/global.scss +21 -28
- package/src/styles/theme.css +124 -41
- package/src/styles/theme.test.ts +119 -0
- package/tailwind.preset.cjs +30 -20
- 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 -208
- 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 -60
- package/dist/components/charts/ScatterPlot/ScatterPlot.types.js +0 -19
- 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/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 React__default, { useRef, useCallback } from 'react';
|
|
3
|
+
import React__default, { useRef, useCallback, useEffect } from 'react';
|
|
4
4
|
import { CaretRight } from '@phosphor-icons/react';
|
|
5
5
|
import { cn } from '../../../utils/cn.js';
|
|
6
6
|
import { useContextMenuContext, useSubMenuContext } from './ContextMenuContext.js';
|
|
@@ -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(CaretRight, { className: "absolute right-2 top-1/2 -translate-y-1/2 size-3 text-[var(--color-text-secondary)]", "aria-hidden": "true", weight: "bold" })] }));
|
|
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
|
};
|
|
@@ -10,7 +10,7 @@ const drawerTheme = {
|
|
|
10
10
|
inner: "h-full flex flex-col",
|
|
11
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-[length:var(--drawer-title-size)] font-semibold
|
|
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
15
|
body: "flex-1 overflow-y-auto px-[var(--drawer-px)] py-[var(--drawer-py)]",
|
|
16
16
|
// Footer's vertical padding is deliberately lighter than header/body —
|
|
@@ -3,7 +3,6 @@ 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
6
|
import { X } from '@phosphor-icons/react';
|
|
8
7
|
|
|
9
8
|
const DrawerHeader = ({ children, icon, showCloseButton, className, ...props }) => {
|
|
@@ -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`,
|
|
@@ -14,7 +14,7 @@ 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.
|
|
@@ -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
|
|
@@ -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,
|
|
@@ -46,13 +46,13 @@ const messageTheme = {
|
|
|
46
46
|
statusFailed: "text-[var(--color-danger)]",
|
|
47
47
|
// Attachment styles
|
|
48
48
|
attachmentContainerStyle: "flex flex-col gap-2 mt-2",
|
|
49
|
-
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",
|
|
50
50
|
imageStyle: "rounded-lg overflow-hidden max-w-xs",
|
|
51
|
-
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",
|
|
52
52
|
linkStyle: "flex flex-col rounded-lg border border-[var(--color-border)] overflow-hidden text-xs max-w-xs",
|
|
53
53
|
// Reactions styles
|
|
54
54
|
reactionsContainerStyle: "flex flex-wrap items-center gap-1.5 mt-1.5",
|
|
55
|
-
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)]",
|
|
56
56
|
reactionPillActiveStyle: "border-[var(--color-primary-200)] bg-[var(--color-primary-50)] text-[var(--color-primary)]",
|
|
57
57
|
// Reply/quote styles
|
|
58
58
|
replyStyle: "border-l-2 border-[var(--color-border)] pl-2.5 mb-2 text-xs text-[var(--color-text-muted)]",
|
|
@@ -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
|
};
|
|
@@ -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 }) }) }));
|
|
@@ -6,7 +6,7 @@ const modalTheme = {
|
|
|
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
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-[length:var(--modal-title-size)]
|
|
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
11
|
// pb-[...*0.75] is the gap before the footer — proportional to --modal-py
|
|
12
12
|
// (today's ratio, 12/16) so a themed --modal-py increase widens it too.
|
|
@@ -3,7 +3,6 @@ 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
6
|
import { X } from '@phosphor-icons/react';
|
|
8
7
|
|
|
9
8
|
const ModalHeader = ({ children, icon, showCloseButton, className, ...props }) => {
|
|
@@ -47,7 +47,9 @@ const ModalStackModal = ({ size = "md", showCloseButton = true, showBackButton =
|
|
|
47
47
|
titleId,
|
|
48
48
|
subtitleId,
|
|
49
49
|
}), [closeHandler, size, isSizeToken, showCloseButton, theme, isBodyScrollable, setIsBodyScrollable, titleId, subtitleId]);
|
|
50
|
-
return (jsx(ModalContext.Provider, { value: contextValue, children: jsx("div", { className: cn(
|
|
50
|
+
return (jsx(ModalContext.Provider, { value: contextValue, children: jsx("div", { className: cn(
|
|
51
|
+
// Opaque — same reason as Modal: behind the shared scrim, no blur on the panel.
|
|
52
|
+
surfaceClasses(surfaceLevel, { translucent: false, shadow: false }), theme.container, modalSizeVariants[size], className), role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": subtitleId, children: jsxs(SurfaceProvider, { level: surfaceLevel, children: [showBackButton && (jsx("div", { className: cn(modalStackTheme.backButton), children: jsxs(Link, { onClick: backHandler, "aria-label": "Go back", size: "sm", children: [jsx(ArrowLeft, { className: "size-4" }), "Back"] }) })), children] }) }) }));
|
|
51
53
|
};
|
|
52
54
|
ModalStackModal.displayName = "ModalStack.Modal";
|
|
53
55
|
|
|
@@ -15,6 +15,7 @@ import { Tooltip } from '../Tooltip/Tooltip.js';
|
|
|
15
15
|
import '../Tooltip/Tooltip.animations.js';
|
|
16
16
|
import { Badge } from '../Badge/Badge.js';
|
|
17
17
|
import { CaretDown } from '@phosphor-icons/react';
|
|
18
|
+
import { Ripple } from '../shared/Ripple.js';
|
|
18
19
|
import { AnimatePresence, motion } from 'motion/react';
|
|
19
20
|
|
|
20
21
|
const NavItem = React__default.forwardRef(({ children, startContent, endContent, notification, description, shortcut, href, onClick, active = false, isDisabled = false, hasSubmenu: propHasSubmenu = false, expanded: controlledExpanded, onToggleExpanded, items, defaultExpanded = false, level = 0, showTooltipWhenCollapsed = true, className, theme: customTheme = {}, ...props }, ref) => {
|
|
@@ -186,7 +187,7 @@ const NavItem = React__default.forwardRef(({ children, startContent, endContent,
|
|
|
186
187
|
const iconClasses = cn(theme.icon, getIconStateClasses(), hasSubmenu && isExpanded && !isActive && "opacity-100", isCollapsedView && ((_b = theme.collapsed) === null || _b === void 0 ? void 0 : _b.icon), isHoveredOrDropdownOpen && "opacity-100");
|
|
187
188
|
const textClasses = cn(theme.text);
|
|
188
189
|
// Chevron for submenu
|
|
189
|
-
const chevron = hasSubmenu && !isCollapsedView ? (jsx(CaretDown, { weight: "bold", className: cn("size-4 transition-transform duration-
|
|
190
|
+
const chevron = hasSubmenu && !isCollapsedView ? (jsx(CaretDown, { weight: "bold", className: cn("size-4 transition-transform duration-[var(--motion-duration-base)] text-[var(--color-text-muted)]", isExpanded && "text-[var(--color-text-primary)]", isExpanded && "rotate-180") })) : null;
|
|
190
191
|
// Strip drag/animation DOM handlers that collide with motion's prop types.
|
|
191
192
|
// `onSubmit`/`onSubmitCapture` are stripped too: NavItem renders as either
|
|
192
193
|
// `motion.a` or `motion.button`, but `NavItemProps extends HTMLAttributes<HTMLElement>`
|
|
@@ -230,7 +231,7 @@ const NavItem = React__default.forwardRef(({ children, startContent, endContent,
|
|
|
230
231
|
? ` (${notification} unread)`
|
|
231
232
|
: notification === true
|
|
232
233
|
? " (unread)"
|
|
233
|
-
: null] }))] }));
|
|
234
|
+
: null] })), jsx(Ripple, { disabled: isDisabled })] }));
|
|
234
235
|
// Content component
|
|
235
236
|
const content = href && !hasSubmenu ? (jsx(motion.a, { ref: ref, href: isDisabled ? undefined : href, tabIndex: isDisabled ? -1 : undefined, ...interactionProps, children: innerContent })) : (jsx(motion.button, { ref: ref, type: "button", disabled: isDisabled, ...interactionProps, children: innerContent }));
|
|
236
237
|
// Self-contained submenu
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const navItemTheme = {
|
|
2
|
-
baseStyle: "group relative flex items-center gap-3 px-2.5 py-2 text-sm font-medium cursor-pointer select-none w-full rounded-[var(--nav-item-radius)] outline-none overflow-hidden transition-[padding,gap,height,background-color,border-color,color,box-shadow] duration-
|
|
2
|
+
baseStyle: "group relative flex items-center gap-3 px-2.5 py-2 text-sm font-medium cursor-pointer select-none w-full rounded-[var(--nav-item-radius)] outline-none overflow-hidden transition-[padding,gap,height,background-color,border-color,color,box-shadow] duration-[var(--motion-duration-base)] ease-[cubic-bezier(0.4,0,0.2,1)] text-left",
|
|
3
3
|
icon: "size-5",
|
|
4
4
|
text: "flex-1 min-w-0 truncate",
|
|
5
5
|
// State styling resolved in JS to plain utility classes so `className` overrides win
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const offlineIndicatorTheme = {
|
|
2
|
-
base: "fixed z-50 flex items-center gap-1.5 transition-colors duration-
|
|
2
|
+
base: "fixed z-50 flex items-center gap-1.5 transition-colors duration-[var(--motion-duration-slow)] select-none",
|
|
3
3
|
positions: {
|
|
4
4
|
top: "top-4 left-1/2 -translate-x-1/2",
|
|
5
5
|
bottom: "bottom-4 left-1/2 -translate-x-1/2",
|
|
@@ -34,7 +34,9 @@ const offlineIndicatorTheme = {
|
|
|
34
34
|
// (near-black in light, near-white in dark) — a fixed Link color can't.
|
|
35
35
|
action: "text-xs font-semibold text-inherit",
|
|
36
36
|
icon: "size-3.5 flex-shrink-0",
|
|
37
|
-
|
|
37
|
+
// tracking-tight IS -0.025em — byte-identical to the arbitrary value it
|
|
38
|
+
// replaces, but routed through --tracking-tight so a theme can retune it.
|
|
39
|
+
message: "text-xs font-medium tracking-tight",
|
|
38
40
|
queueCount: "text-xs opacity-80 ml-1",
|
|
39
41
|
};
|
|
40
42
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const pageHeadingTheme = {
|
|
2
2
|
baseStyle: "flex flex-col pb-6 mb-6",
|
|
3
3
|
headerStyle: "flex flex-col items-start sm:flex-row sm:items-center gap-4",
|
|
4
|
-
titleStyle: "text-[length:var(--page-heading-title-size)]
|
|
4
|
+
titleStyle: "text-[length:var(--page-heading-title-size)]/[var(--page-heading-title-line-height)] font-bold text-[var(--color-text-primary)]",
|
|
5
5
|
subtitleStyle: "text-sm text-[var(--color-text-secondary)] mt-1",
|
|
6
6
|
actionsStyle: "sm:ml-auto flex items-center gap-2 shrink-0",
|
|
7
7
|
iconStyle: "flex items-center justify-center shrink-0 text-[var(--color-text-muted)]",
|
|
@@ -7,7 +7,7 @@ const paginationTheme = {
|
|
|
7
7
|
// Unified item styles for all pagination elements (pages, navigation, etc.)
|
|
8
8
|
// Light mode: white background, muted text, neutral borders
|
|
9
9
|
// Dark mode: neutral-800 background, lighter text, neutral-600 borders
|
|
10
|
-
itemStyle: "inline-flex items-center justify-center font-medium rounded-[var(--form-radius)] transition-all duration-
|
|
10
|
+
itemStyle: "inline-flex items-center justify-center font-medium rounded-[var(--form-radius)] transition-all duration-[var(--motion-duration-base)] ease-in-out " +
|
|
11
11
|
// Focus styles
|
|
12
12
|
"focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-2 dark:focus-visible:ring-offset-[var(--color-mono-900)] " +
|
|
13
13
|
// Base state - light
|
|
@@ -15,7 +15,7 @@ const paginationTheme = {
|
|
|
15
15
|
// Base state - dark
|
|
16
16
|
"dark:bg-transparent dark:text-[var(--color-text-secondary)] dark:border-transparent " +
|
|
17
17
|
// Hover state - light
|
|
18
|
-
"hover:text-[var(--color-text-primary)] hover:bg-[var(--color-
|
|
18
|
+
"hover:text-[var(--color-text-primary)] hover:bg-[var(--color-surface)] hover:border-[var(--color-border)] " +
|
|
19
19
|
// Hover state - dark
|
|
20
20
|
"dark:hover:bg-[var(--color-surface-hover)] dark:hover:text-[var(--color-text-primary)] dark:hover:border-[var(--color-border)]/0 " +
|
|
21
21
|
// Active state - light
|
|
@@ -4,6 +4,7 @@ import React__default, { useState, useEffect, useCallback } from 'react';
|
|
|
4
4
|
import { useReducedMotion, motion } from 'motion/react';
|
|
5
5
|
import { pillTheme } from './Pill.theme.js';
|
|
6
6
|
import { createPressVariants } from '../shared/interaction.animations.js';
|
|
7
|
+
import { Ripple } from '../shared/Ripple.js';
|
|
7
8
|
import { cn } from '../../../utils/cn.js';
|
|
8
9
|
|
|
9
10
|
// Shared press physics + subtle hover lift (module-level constant)
|
|
@@ -122,7 +123,7 @@ const Pill = React__default.forwardRef((props, ref) => {
|
|
|
122
123
|
// Accessibility
|
|
123
124
|
role: isSelectable && !readOnly ? "button" : undefined, tabIndex: isInteractive ? 0 : undefined, "aria-pressed": isSelectable && !readOnly ? isSelected : undefined, "aria-readonly": readOnly || undefined,
|
|
124
125
|
// Animation
|
|
125
|
-
variants: PILL_PRESS_VARIANTS, animate: "rest", whileHover: isInteractive && !shouldReduceMotion ? "hover" : undefined, whileTap: isInteractive && !shouldReduceMotion ? "press" : undefined, ...restProps, children: [renderStartIcon(), children] }));
|
|
126
|
+
variants: PILL_PRESS_VARIANTS, animate: "rest", whileHover: isInteractive && !shouldReduceMotion ? "hover" : undefined, whileTap: isInteractive && !shouldReduceMotion ? "press" : undefined, ...restProps, children: [renderStartIcon(), children, isInteractive && jsx(Ripple, {})] }));
|
|
126
127
|
});
|
|
127
128
|
Pill.displayName = "Pill";
|
|
128
129
|
|
|
@@ -8,8 +8,10 @@ const pillTheme = {
|
|
|
8
8
|
/**
|
|
9
9
|
* Base pill style - structure and default colors (no hover)
|
|
10
10
|
*/
|
|
11
|
-
baseStyle:
|
|
12
|
-
|
|
11
|
+
baseStyle:
|
|
12
|
+
// `relative` positions the press <Ripple /> layer (selectable pills only).
|
|
13
|
+
"relative inline-flex items-center justify-center font-medium rounded-full select-none whitespace-nowrap " +
|
|
14
|
+
"ring-1 bg-[var(--color-surface)] transition-[color,background-color,box-shadow] duration-[var(--motion-duration-fast)] ease-out " +
|
|
13
15
|
"text-[var(--color-text-primary)] ring-[var(--color-border)] " +
|
|
14
16
|
"focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)]",
|
|
15
17
|
/**
|
|
@@ -45,11 +45,22 @@ const PopoverBody = React__default.forwardRef(({ children, className, animation
|
|
|
45
45
|
((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
|
-
// Ignore clicks that land inside
|
|
49
|
-
// Select/Tooltip/Dropdown/Popover renders to document.body,
|
|
50
|
-
// content ref — without this it would count as an outside
|
|
51
|
-
// dismiss the popover). See the `data-flikkui-portal`
|
|
52
|
-
|
|
48
|
+
// Ignore clicks that land inside a DESCENDANT FlikkUI overlay portal (a
|
|
49
|
+
// nested Select/Tooltip/Dropdown/Popover renders to document.body,
|
|
50
|
+
// outside our content ref — without this it would count as an outside
|
|
51
|
+
// click and dismiss the popover). See the `data-flikkui-portal`
|
|
52
|
+
// convention.
|
|
53
|
+
//
|
|
54
|
+
// The bail only protects against a DESCENDANT portal, not an ANCESTOR
|
|
55
|
+
// one: when this popover's own trigger lives inside another overlay
|
|
56
|
+
// (e.g. a Popover opened from inside a Modal), a click on that host
|
|
57
|
+
// overlay's body content also matches `closest("[data-flikkui-portal]")`
|
|
58
|
+
// — it finds the Modal's portal wrapper, which contains our trigger.
|
|
59
|
+
// That's a real outside click and must still close the popover. Only
|
|
60
|
+
// bail when the matched portal does NOT contain our trigger — i.e.
|
|
61
|
+
// it's a portal we opened ourselves, not the one hosting us.
|
|
62
|
+
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]");
|
|
63
|
+
if (portalEl && !portalEl.contains(triggerRef.current)) {
|
|
53
64
|
return;
|
|
54
65
|
}
|
|
55
66
|
if (closeOnClickOutside && !preventClose) {
|
|
@@ -1,29 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { ProgressProps } from "./Progress.types";
|
|
3
|
-
/**
|
|
4
|
-
* Progress component - Linear progress bar for tracking completion
|
|
5
|
-
*
|
|
6
|
-
* Features:
|
|
7
|
-
* - Determinate mode: Shows specific progress value (0-100)
|
|
8
|
-
* - Indeterminate mode: Animated loading state when value is undefined
|
|
9
|
-
* - Multiple sizes with default primary color
|
|
10
|
-
* - className controls the fill bar color (the primary styling target)
|
|
11
|
-
* - wrapperClassName controls the outer container
|
|
12
|
-
* - Flexible label positioning (right, top, bottom, inside)
|
|
13
|
-
* - Respects reduced motion preferences
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* // Default (primary color)
|
|
17
|
-
* <Progress value={60} />
|
|
18
|
-
*
|
|
19
|
-
* // Custom fill color via className
|
|
20
|
-
* <Progress value={70} className="bg-[var(--color-success)]" />
|
|
21
|
-
*
|
|
22
|
-
* // With label
|
|
23
|
-
* <Progress value={75} showLabel labelPosition="right" />
|
|
24
|
-
*
|
|
25
|
-
* // Indeterminate (loading)
|
|
26
|
-
* <Progress />
|
|
27
|
-
*/
|
|
28
3
|
declare const Progress: React.ForwardRefExoticComponent<ProgressProps & React.RefAttributes<HTMLDivElement>>;
|
|
29
4
|
export { Progress };
|