@flikk/ui 1.0.0-beta.26 → 1.0.0-beta.29
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/dist/bg/1.webp +0 -0
- package/dist/bg/10.webp +0 -0
- package/dist/bg/11.webp +0 -0
- package/dist/bg/12.webp +0 -0
- package/dist/bg/13.webp +0 -0
- package/dist/bg/14.webp +0 -0
- package/dist/bg/15.webp +0 -0
- package/dist/bg/16.webp +0 -0
- package/dist/bg/17.webp +0 -0
- package/dist/bg/18.webp +0 -0
- package/dist/bg/19.webp +0 -0
- package/dist/bg/2.webp +0 -0
- package/dist/bg/20.webp +0 -0
- package/dist/bg/21.webp +0 -0
- package/dist/bg/22.webp +0 -0
- package/dist/bg/3.webp +0 -0
- package/dist/bg/4.webp +0 -0
- package/dist/bg/5.webp +0 -0
- package/dist/bg/6.webp +0 -0
- package/dist/bg/7.webp +0 -0
- package/dist/bg/8.webp +0 -0
- package/dist/bg/9.webp +0 -0
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
- package/dist/components/ai/PromptInput/PromptInput.js +7 -140
- package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -85
- package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
- package/dist/components/canvas/Background.d.ts +19 -0
- package/dist/components/canvas/Background.js +23 -0
- package/dist/components/canvas/BaseNode.d.ts +15 -0
- package/dist/components/canvas/BaseNode.js +20 -0
- package/dist/components/canvas/CanvasToolbar.d.ts +34 -0
- package/dist/components/canvas/CanvasToolbar.js +34 -0
- package/dist/components/canvas/Edge.d.ts +35 -0
- package/dist/components/canvas/Edge.js +97 -0
- package/dist/components/canvas/EdgeLayer.d.ts +18 -0
- package/dist/components/canvas/EdgeLayer.js +111 -0
- package/dist/components/canvas/Handle.d.ts +11 -0
- package/dist/components/canvas/Handle.js +63 -0
- package/dist/components/canvas/MiniMap.d.ts +22 -0
- package/dist/components/canvas/MiniMap.js +105 -0
- package/dist/components/canvas/NodeCanvas.d.ts +10 -0
- package/dist/components/canvas/NodeCanvas.js +477 -0
- package/dist/components/canvas/NodeCanvas.theme.d.ts +7 -0
- package/dist/components/canvas/NodeCanvas.theme.js +9 -0
- package/dist/components/canvas/NodeCanvas.types.d.ts +187 -0
- package/dist/components/canvas/NodeControls.d.ts +25 -0
- package/dist/components/canvas/NodeControls.js +40 -0
- package/dist/components/canvas/NodeRenderer.d.ts +19 -0
- package/dist/components/canvas/NodeRenderer.js +117 -0
- package/dist/components/canvas/changes.d.ts +11 -0
- package/dist/components/canvas/changes.js +76 -0
- package/dist/components/canvas/context/CanvasContext.d.ts +32 -0
- package/dist/components/canvas/context/CanvasContext.js +14 -0
- package/dist/components/canvas/context/ConnectionContext.d.ts +33 -0
- package/dist/components/canvas/context/ConnectionContext.js +13 -0
- package/dist/components/canvas/context/HandleRegistry.d.ts +24 -0
- package/dist/components/canvas/context/HandleRegistry.js +15 -0
- package/dist/components/canvas/context/InteractionContext.d.ts +18 -0
- package/dist/components/canvas/context/InteractionContext.js +14 -0
- package/dist/components/canvas/context/NodeIdContext.d.ts +3 -0
- package/dist/components/canvas/context/NodeIdContext.js +15 -0
- package/dist/components/canvas/hooks/useConnection.d.ts +17 -0
- package/dist/components/canvas/hooks/useConnection.js +29 -0
- package/dist/components/canvas/hooks/useMarquee.d.ts +25 -0
- package/dist/components/canvas/hooks/useMarquee.js +91 -0
- package/dist/components/canvas/hooks/useNodeDrag.d.ts +23 -0
- package/dist/components/canvas/hooks/useNodeDrag.js +110 -0
- package/dist/components/canvas/hooks/usePanZoom.d.ts +30 -0
- package/dist/components/canvas/hooks/usePanZoom.js +189 -0
- package/dist/components/canvas/hooks/useViewport.d.ts +21 -0
- package/dist/components/canvas/hooks/useViewport.js +35 -0
- package/dist/components/canvas/index.d.ts +14 -0
- package/dist/components/canvas/index.js +12 -0
- package/dist/components/canvas/layout.d.ts +22 -0
- package/dist/components/canvas/layout.js +67 -0
- package/dist/components/canvas/utils.d.ts +4 -0
- package/dist/components/canvas/utils.js +16 -0
- package/dist/components/charts/AreaChart/AreaChart.js +136 -101
- package/dist/components/charts/AreaChart/AreaChart.types.d.ts +5 -5
- package/dist/components/charts/AreaChart/AreaChart.types.js +1 -0
- package/dist/components/charts/BarChart/BarChart.js +207 -143
- package/dist/components/charts/BarChart/BarChart.types.d.ts +4 -4
- package/dist/components/charts/BarChart/BarChart.types.js +1 -0
- package/dist/components/charts/ComboChart/ComboChart.types.d.ts +2 -2
- package/dist/components/charts/LineChart/LineChart.js +88 -72
- package/dist/components/charts/LineChart/LineChart.types.d.ts +3 -3
- package/dist/components/charts/RadarChart/RadarChart.js +1 -1
- package/dist/components/charts/RadarChart/RadarChart.theme.js +5 -2
- package/dist/components/charts/ScatterPlot/ScatterPlot.js +62 -72
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +10 -1
- package/dist/components/charts/ScatterPlot/ScatterPlot.types.d.ts +3 -9
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +33 -33
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +2 -2
- package/dist/components/charts/hooks/index.d.ts +2 -0
- package/dist/components/charts/hooks/useChartDimensions.d.ts +29 -0
- package/dist/components/charts/hooks/useChartDimensions.js +42 -0
- package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +1 -1
- package/dist/components/charts/types/chart.types.d.ts +11 -2
- package/dist/components/charts/types/chart.types.js +10 -3
- package/dist/components/core/Avatar/Avatar.js +5 -1
- package/dist/components/core/AvatarGroup/AvatarGroup.js +5 -1
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +4 -2
- package/dist/components/core/Badge/Badge.js +1 -1
- package/dist/components/core/Badge/Badge.theme.js +16 -15
- package/dist/components/core/Button/Button.js +1 -1
- package/dist/components/core/Button/Button.theme.js +3 -3
- package/dist/components/core/Calendar/Calendar.theme.js +1 -1
- package/dist/components/core/Card/Card.js +7 -3
- package/dist/components/core/Card/Card.theme.js +3 -3
- package/dist/components/core/Card/Card.types.d.ts +27 -2
- package/dist/components/core/CommandPalette/CommandItem.js +4 -5
- package/dist/components/core/CommandPalette/CommandPalette.js +1 -1
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +11 -13
- package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +0 -2
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +14 -15
- package/dist/components/core/ContextMenu/ContextMenuItem.js +1 -1
- package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +1 -1
- package/dist/components/core/DotSeparator/DotSeparator.d.ts +3 -0
- package/dist/components/core/DotSeparator/DotSeparator.js +19 -0
- package/dist/components/core/DotSeparator/DotSeparator.theme.d.ts +2 -0
- package/dist/components/core/DotSeparator/DotSeparator.theme.js +10 -0
- package/dist/components/core/DotSeparator/DotSeparator.types.d.ts +25 -0
- package/dist/components/core/DotSeparator/index.d.ts +3 -0
- package/dist/components/core/Dropdown/Dropdown.theme.js +5 -6
- package/dist/components/core/Dropdown/DropdownItem.js +1 -1
- package/dist/components/core/Dropdown/DropdownMenu.js +58 -30
- package/dist/components/core/HeroCard/HeroCard.d.ts +5 -0
- package/dist/components/core/HeroCard/HeroCard.js +99 -0
- package/dist/components/core/HeroCard/HeroCard.theme.d.ts +3 -0
- package/dist/components/core/HeroCard/HeroCard.theme.js +8 -0
- package/dist/components/core/HeroCard/HeroCard.types.d.ts +70 -0
- package/dist/components/core/HeroCard/index.d.ts +4 -0
- package/dist/components/core/Kbd/Kbd.theme.js +1 -1
- package/dist/components/core/MenuItem/MenuItem.js +5 -2
- package/dist/components/core/MenuItem/MenuItem.theme.d.ts +6 -0
- package/dist/components/core/MenuItem/MenuItem.theme.js +19 -16
- package/dist/components/core/MenuItem/MenuItem.types.d.ts +2 -0
- package/dist/components/core/Modal/Modal.d.ts +1 -1
- package/dist/components/core/Modal/Modal.js +2 -7
- package/dist/components/core/Modal/Modal.theme.js +4 -8
- package/dist/components/core/Modal/Modal.types.d.ts +0 -10
- package/dist/components/core/Modal/index.d.ts +1 -1
- package/dist/components/core/ModalStack/ModalStack.d.ts +1 -1
- package/dist/components/core/ModalStack/ModalStack.types.d.ts +1 -2
- package/dist/components/core/ModalStack/ModalStackModal.d.ts +1 -1
- package/dist/components/core/ModalStack/ModalStackModal.js +2 -7
- package/dist/components/core/NavItem/NavItem.js +20 -4
- package/dist/components/core/NavItem/NavItem.theme.js +13 -2
- package/dist/components/core/PageHeading/PageHeading.theme.js +2 -2
- package/dist/components/core/Popover/Popover.theme.js +1 -1
- package/dist/components/core/Popover/Popover.types.d.ts +6 -2
- package/dist/components/core/Popover/PopoverBody.js +10 -3
- package/dist/components/core/ScrollArea/ScrollArea.js +242 -4
- package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -1
- package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +4 -0
- package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +23 -0
- package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +4 -0
- package/dist/components/core/ScrollArea/smooth/useSmoothScroll.types.d.ts +5 -0
- package/dist/components/core/Segmented/Segmented.theme.js +2 -2
- package/dist/components/core/Sidebar/Sidebar.d.ts +2 -0
- package/dist/components/core/Sidebar/Sidebar.js +15 -7
- package/dist/components/core/Sidebar/Sidebar.types.d.ts +92 -4
- package/dist/components/core/Sidebar/SidebarCard.d.ts +25 -0
- package/dist/components/core/Sidebar/SidebarCard.js +68 -0
- package/dist/components/core/Sidebar/SidebarCard.theme.d.ts +8 -0
- package/dist/components/core/Sidebar/SidebarCard.theme.js +18 -0
- package/dist/components/core/Sidebar/SidebarContent.js +5 -1
- package/dist/components/core/Sidebar/SidebarContext.js +1 -1
- package/dist/components/core/Sidebar/SidebarHeader.js +10 -2
- package/dist/components/core/Sidebar/SidebarLogo.js +38 -3
- package/dist/components/core/Sidebar/SidebarSearch.d.ts +22 -0
- package/dist/components/core/Sidebar/SidebarSearch.js +135 -0
- package/dist/components/core/Sidebar/SidebarToggle.js +1 -1
- package/dist/components/core/Sidebar/SidebarUserProfile.js +2 -2
- package/dist/components/core/Sidebar/index.d.ts +3 -1
- package/dist/components/core/Tag/Tag.js +29 -5
- package/dist/components/core/Tag/Tag.theme.js +13 -8
- package/dist/components/core/Tag/Tag.types.d.ts +7 -0
- package/dist/components/core/Tooltip/Tooltip.js +1 -1
- package/dist/components/core/Tooltip/Tooltip.theme.js +1 -2
- package/dist/components/core/index.d.ts +2 -0
- package/dist/components/core/index.js +6 -0
- package/dist/components/data-display/DescriptionList/DescriptionList.js +23 -7
- package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +10 -3
- package/dist/components/data-display/DescriptionList/DescriptionList.types.d.ts +49 -10
- package/dist/components/data-display/DescriptionList/index.d.ts +1 -1
- package/dist/components/data-display/Feed/Feed.js +28 -5
- package/dist/components/data-display/Feed/Feed.theme.js +1 -1
- package/dist/components/data-display/Feed/Feed.types.d.ts +32 -1
- package/dist/components/data-display/Feed/index.d.ts +1 -1
- package/dist/components/data-display/GanttChart/GanttChart.d.ts +1 -1
- package/dist/components/data-display/GanttChart/GanttChart.js +31 -4
- package/dist/components/data-display/GanttChart/GanttChart.theme.js +19 -17
- package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +19 -0
- package/dist/components/data-display/GanttChart/GanttChart.utils.js +1 -1
- package/dist/components/data-display/GanttChart/GanttChartPanel.d.ts +1 -1
- package/dist/components/data-display/GanttChart/GanttChartPanel.js +3 -3
- package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +7 -4
- package/dist/components/data-display/GanttChart/GanttMilestone.js +5 -5
- package/dist/components/data-display/GanttChart/GanttTablePanel.js +1 -1
- package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +2 -2
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +37 -16
- package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +35 -11
- package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -2
- package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +3 -2
- package/dist/components/data-display/GanttChart/index.d.ts +1 -1
- package/dist/components/data-display/Metric/Metric.js +8 -8
- package/dist/components/data-display/Metric/Metric.theme.d.ts +3 -2
- package/dist/components/data-display/Metric/Metric.theme.js +50 -68
- package/dist/components/data-display/Metric/Metric.types.d.ts +19 -21
- package/dist/components/data-display/Table/Table.js +2 -2
- package/dist/components/data-display/Table/Table.theme.js +27 -9
- package/dist/components/data-display/Table/Table.types.d.ts +8 -0
- package/dist/components/data-display/Table/TableBody.js +2 -2
- package/dist/components/data-display/Table/TableCell.js +1 -1
- package/dist/components/data-display/Table/TableRow.d.ts +1 -1
- package/dist/components/data-display/Table/TableRow.js +9 -2
- package/dist/components/data-display/Timeline/Timeline.js +27 -5
- package/dist/components/data-display/Timeline/Timeline.theme.d.ts +10 -2
- package/dist/components/data-display/Timeline/Timeline.theme.js +14 -8
- package/dist/components/data-display/Timeline/Timeline.types.d.ts +48 -16
- package/dist/components/data-display/Timeline/Timeline.utils.d.ts +6 -0
- package/dist/components/data-display/Timeline/Timeline.utils.js +11 -0
- package/dist/components/data-display/Timeline/TimelineItem.js +13 -20
- package/dist/components/data-display/Timeline/TimelineMarker.js +10 -8
- package/dist/components/data-display/Timeline/index.d.ts +2 -2
- package/dist/components/effects/3d/index.d.ts +0 -2
- package/dist/components/effects/3d/index.js +0 -1
- package/dist/components/effects/Aurora/Aurora.d.ts +6 -17
- package/dist/components/effects/Aurora/Aurora.js +297 -131
- package/dist/components/effects/Aurora/Aurora.types.d.ts +6 -0
- package/dist/components/effects/DotPattern/DotPattern.js +1 -1
- package/dist/components/effects/Overlay/Overlay.theme.js +1 -2
- package/dist/components/effects/Preloader/Preloader.animations.d.ts +23 -0
- package/dist/components/effects/Preloader/Preloader.animations.js +150 -0
- package/dist/components/effects/Preloader/Preloader.d.ts +3 -0
- package/dist/components/effects/Preloader/Preloader.js +119 -0
- package/dist/components/effects/Preloader/Preloader.types.d.ts +63 -0
- package/dist/components/effects/Preloader/index.d.ts +2 -0
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +25 -14
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +2 -0
- package/dist/components/effects/TiltCard/TiltCard.d.ts +12 -0
- package/dist/components/effects/TiltCard/TiltCard.glow.d.ts +28 -0
- package/dist/components/effects/TiltCard/TiltCard.glow.js +114 -0
- package/dist/components/effects/TiltCard/TiltCard.js +177 -0
- package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.d.ts → TiltCard/TiltCard.shaders.d.ts} +1 -1
- package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.js → TiltCard/TiltCard.shaders.js} +1 -1
- package/dist/components/effects/TiltCard/TiltCard.types.d.ts +88 -0
- package/dist/components/effects/TiltCard/index.d.ts +2 -0
- package/dist/components/effects/index.d.ts +4 -12
- package/dist/components/effects/index.js +2 -6
- package/dist/components/forms/Checkbox/Checkbox.js +7 -1
- package/dist/components/forms/Combobox/Combobox.js +1 -1
- package/dist/components/forms/Combobox/Combobox.theme.js +2 -4
- package/dist/components/forms/DatePicker/DatePicker.theme.js +11 -18
- package/dist/components/forms/DatePicker/DatePickerTrigger.js +1 -1
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +6 -13
- package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +1 -1
- package/dist/components/forms/FileUpload/FileUpload.animations.d.ts +29 -0
- package/dist/components/forms/FileUpload/FileUpload.animations.js +19 -0
- package/dist/components/forms/FileUpload/FileUpload.js +85 -134
- package/dist/components/forms/FileUpload/FileUpload.theme.d.ts +2 -10
- package/dist/components/forms/FileUpload/FileUpload.theme.js +16 -30
- package/dist/components/forms/FileUpload/FileUpload.types.d.ts +26 -10
- package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
- package/dist/components/forms/Input/Input.theme.js +13 -10
- package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
- package/dist/components/forms/Mention/Mention.js +152 -57
- package/dist/components/forms/Mention/Mention.theme.js +16 -23
- package/dist/components/forms/Mention/Mention.types.d.ts +12 -12
- package/dist/components/forms/Mention/Mention.utils.js +32 -4
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +3 -3
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +5 -5
- package/dist/components/forms/Select/Select.js +2 -2
- package/dist/components/forms/Select/Select.theme.js +3 -3
- package/dist/components/forms/Slider/Slider.theme.js +1 -1
- package/dist/components/forms/Switch/Switch.js +27 -15
- package/dist/components/forms/Switch/Switch.theme.d.ts +36 -6
- package/dist/components/forms/Switch/Switch.theme.js +33 -4
- package/dist/components/forms/Switch/Switch.types.d.ts +12 -2
- package/dist/components/forms/TimePicker/TimePicker.theme.js +1 -2
- package/dist/components/forms/TimePicker/TimePickerContent.js +1 -87
- package/dist/components/forms/TimePicker/TimePickerTrigger.js +1 -1
- package/dist/components/forms/forms.theme.js +21 -16
- package/dist/components/forms/index.d.ts +0 -4
- package/dist/components/forms/index.js +0 -89
- package/dist/components/generative/GenerativeView.d.ts +21 -0
- package/dist/components/generative/GenerativeView.js +116 -0
- package/dist/components/generative/actions.d.ts +26 -0
- package/dist/components/generative/actions.js +51 -0
- package/dist/components/generative/index.d.ts +11 -0
- package/dist/components/generative/index.js +9 -0
- package/dist/components/generative/registry.d.ts +43 -0
- package/dist/components/generative/registry.js +114 -0
- package/dist/components/generative/resolvers.d.ts +35 -0
- package/dist/components/generative/resolvers.js +93 -0
- package/dist/components/generative/schema.generated.d.ts +2 -0
- package/dist/components/generative/schema.generated.js +1639 -0
- package/dist/components/generative/schemaTypes.d.ts +30 -0
- package/dist/components/generative/streaming.d.ts +39 -0
- package/dist/components/generative/streaming.js +283 -0
- package/dist/components/generative/tools.d.ts +21 -0
- package/dist/components/generative/tools.js +54 -0
- package/dist/components/generative/types.d.ts +41 -0
- package/dist/components/generative/useGenerativeStream.d.ts +37 -0
- package/dist/components/generative/useGenerativeStream.js +36 -0
- package/dist/components/generative/validate.d.ts +24 -0
- package/dist/components/generative/validate.js +259 -0
- package/dist/components/layout/AppShell/AppShell.d.ts +10 -0
- package/dist/components/layout/AppShell/AppShell.js +84 -0
- package/dist/components/layout/AppShell/AppShell.theme.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShell.theme.js +42 -0
- package/dist/components/layout/AppShell/AppShell.types.d.ts +127 -0
- package/dist/components/layout/AppShell/AppShellContext.d.ts +14 -0
- package/dist/components/layout/AppShell/AppShellContext.js +19 -0
- package/dist/components/layout/AppShell/AppShellFooter.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellFooter.js +12 -0
- package/dist/components/layout/AppShell/AppShellHeader.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellHeader.js +12 -0
- package/dist/components/layout/AppShell/AppShellMain.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellMain.js +19 -0
- package/dist/components/layout/AppShell/AppShellRightPanel.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellRightPanel.js +16 -0
- package/dist/components/layout/AppShell/AppShellSidebar.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellSidebar.js +16 -0
- package/dist/components/layout/AppShell/AppShellTopbar.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellTopbar.js +12 -0
- package/dist/components/layout/AppShell/index.d.ts +3 -0
- package/dist/components/layout/FormLayout/FormLayout.js +1 -87
- package/dist/components/layout/Grid/Grid.d.ts +3 -0
- package/dist/components/layout/Grid/Grid.js +50 -0
- package/dist/components/layout/Grid/Grid.theme.d.ts +2 -0
- package/dist/components/layout/Grid/Grid.theme.js +35 -0
- package/dist/components/layout/Grid/Grid.types.d.ts +57 -0
- package/dist/components/layout/Grid/index.d.ts +3 -0
- package/dist/components/layout/Section/Section.d.ts +3 -0
- package/dist/components/layout/Section/Section.js +18 -0
- package/dist/components/layout/Section/Section.theme.d.ts +2 -0
- package/dist/components/layout/Section/Section.theme.js +10 -0
- package/dist/components/layout/Section/Section.types.d.ts +34 -0
- package/dist/components/layout/Section/index.d.ts +3 -0
- package/dist/components/layout/Stack/Stack.d.ts +3 -0
- package/dist/components/layout/Stack/Stack.js +19 -0
- package/dist/components/layout/Stack/Stack.theme.d.ts +2 -0
- package/dist/components/layout/Stack/Stack.theme.js +10 -0
- package/dist/components/layout/Stack/Stack.types.d.ts +39 -0
- package/dist/components/layout/Stack/index.d.ts +3 -0
- package/dist/components/layout/index.d.ts +4 -0
- package/dist/components/layout/index.js +8 -0
- package/dist/generative.schema.json +1637 -0
- package/dist/hooks/useSelectPortal.d.ts +10 -2
- package/dist/hooks/useSelectPortal.js +45 -24
- package/dist/index.js +180 -174
- package/dist/registry.json +10205 -0
- package/dist/styles.css +1 -1
- package/dist/tools.json +1731 -0
- package/dist/utils/dateUtils.js +11 -1
- package/package.json +19 -4
- package/src/global.scss +82 -109
- package/src/styles/theme.css +707 -474
- package/dist/bg/1.jpg +0 -0
- package/dist/bg/10.jpg +0 -0
- package/dist/bg/11.jpg +0 -0
- package/dist/bg/14.jpg +0 -0
- package/dist/bg/15.jpg +0 -0
- package/dist/bg/16.jpg +0 -0
- package/dist/bg/17.jpg +0 -0
- package/dist/bg/18.jpg +0 -0
- package/dist/bg/19.jpg +0 -0
- package/dist/bg/2.jpg +0 -0
- package/dist/bg/20.jpg +0 -0
- package/dist/bg/21.jpg +0 -0
- package/dist/bg/22.jpg +0 -0
- package/dist/bg/23.jpg +0 -0
- package/dist/bg/24.jpg +0 -0
- package/dist/bg/3.jpg +0 -0
- package/dist/bg/4.jpg +0 -0
- package/dist/bg/5.jpg +0 -0
- package/dist/bg/6.jpg +0 -0
- package/dist/bg/7.jpg +0 -0
- package/dist/bg/8.jpg +0 -0
- package/dist/bg/9.jpg +0 -0
- package/dist/components/effects/MorphingText/MorphingText.d.ts +0 -17
- package/dist/components/effects/MorphingText/MorphingText.js +0 -125
- package/dist/components/effects/MorphingText/MorphingText.types.d.ts +0 -18
- package/dist/components/effects/MorphingText/index.d.ts +0 -2
- package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +0 -8
- package/dist/components/effects/PageTransition/PageTransition.animations.js +0 -53
- package/dist/components/effects/PageTransition/PageTransition.d.ts +0 -3
- package/dist/components/effects/PageTransition/PageTransition.js +0 -82
- package/dist/components/effects/PageTransition/PageTransition.types.d.ts +0 -15
- package/dist/components/effects/PageTransition/index.d.ts +0 -2
- package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +0 -26
- package/dist/components/effects/ParallaxSection/ParallaxSection.js +0 -71
- package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +0 -11
- package/dist/components/effects/ParallaxSection/index.d.ts +0 -2
- package/dist/components/effects/Spotlight/Spotlight.d.ts +0 -36
- package/dist/components/effects/Spotlight/Spotlight.js +0 -112
- package/dist/components/effects/Spotlight/Spotlight.types.d.ts +0 -29
- package/dist/components/effects/Spotlight/index.d.ts +0 -2
- package/dist/components/effects/SpotlightBorder/SpotlightBorder.d.ts +0 -18
- package/dist/components/effects/SpotlightBorder/SpotlightBorder.js +0 -213
- package/dist/components/effects/SpotlightBorder/SpotlightBorder.types.d.ts +0 -61
- package/dist/components/effects/SpotlightBorder/index.d.ts +0 -2
- package/dist/components/effects/StickyScroll/StickyScroll.d.ts +0 -30
- package/dist/components/effects/StickyScroll/StickyScroll.js +0 -128
- package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +0 -19
- package/dist/components/effects/StickyScroll/index.d.ts +0 -2
- package/dist/components/forms/CronInput/CronInput.d.ts +0 -3
- package/dist/components/forms/CronInput/CronInput.js +0 -113
- package/dist/components/forms/CronInput/CronInput.theme.d.ts +0 -6
- package/dist/components/forms/CronInput/CronInput.theme.js +0 -84
- package/dist/components/forms/CronInput/CronInput.types.d.ts +0 -109
- package/dist/components/forms/CronInput/CronInput.utils.d.ts +0 -67
- package/dist/components/forms/CronInput/CronInput.utils.js +0 -505
- package/dist/components/forms/CronInput/index.d.ts +0 -4
- /package/dist/components/effects/{SpotlightBorder/SpotlightBorder.types.js → TiltCard/TiltCard.types.js} +0 -0
|
@@ -1,95 +1,12 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import React__default, { useMemo, useId, useRef, useState,
|
|
2
|
+
import React__default, { useMemo, useId, useRef, useCallback, useState, useEffect } from 'react';
|
|
3
|
+
import { useReducedMotion, AnimatePresence, motion } from 'motion/react';
|
|
3
4
|
import { fileUploadTheme } from './FileUpload.theme.js';
|
|
5
|
+
import { PREVIEW_LAYOUT_SPRING, PREVIEW_ITEM } from './FileUpload.animations.js';
|
|
4
6
|
import { cn } from '../../../utils/cn.js';
|
|
5
7
|
import { CloudArrowUpIcon, DocumentIcon, XMarkIcon } from '@heroicons/react/24/outline';
|
|
6
|
-
import '../../core/Accordion/Accordion.js';
|
|
7
|
-
import '../../core/AlertDialog/AlertDialog.js';
|
|
8
|
-
import '../../core/AspectRatio/AspectRatio.js';
|
|
9
|
-
import '../../core/Avatar/Avatar.js';
|
|
10
|
-
import '../../core/AvatarGroup/AvatarGroup.js';
|
|
11
|
-
import '../../core/Badge/Badge.js';
|
|
12
|
-
import '../../core/Breadcrumbs/Breadcrumbs.js';
|
|
13
|
-
import '../../core/Breadcrumbs/Breadcrumbs.theme.js';
|
|
14
|
-
import { Button } from '../../core/Button/Button.js';
|
|
15
|
-
import '../../core/ButtonGroup/ButtonGroup.js';
|
|
16
|
-
import '../../core/ButtonGroup/ButtonGroupSeparator.js';
|
|
17
|
-
import '../../core/ButtonGroup/ButtonGroupText.js';
|
|
18
|
-
import '../../core/Calendar/Calendar.js';
|
|
19
|
-
import '../../core/Calendar/CalendarMini/CalendarMini.js';
|
|
20
|
-
import '../../core/Card/Card.js';
|
|
21
|
-
import '../../core/CardStack/CardStack.js';
|
|
22
|
-
import '../../core/Carousel/Carousel.js';
|
|
23
|
-
import '../../core/Carousel/CarouselBody.js';
|
|
24
|
-
import '../../core/CommandPalette/CommandPalette.js';
|
|
25
|
-
import '../../core/Separator/Separator.js';
|
|
26
|
-
import '../../core/Drawer/Drawer.js';
|
|
27
|
-
import '../../core/Drawer/DrawerBody.js';
|
|
28
|
-
import '../../core/Dropdown/Dropdown.js';
|
|
29
|
-
import '../../core/Dropdown/DropdownTrigger.js';
|
|
30
|
-
import '../../core/Dropdown/DropdownMenu.js';
|
|
31
|
-
import '../../core/Dropdown/DropdownItem.js';
|
|
32
|
-
import '../../core/Dropdown/DropdownSection.js';
|
|
33
|
-
import '../../core/Dropdown/DropdownSeparator.js';
|
|
34
|
-
import '../../core/Dropdown/Dropdown.theme.js';
|
|
35
|
-
import '../../core/Kbd/Kbd.js';
|
|
36
|
-
import '../../core/MenuItem/MenuItem.js';
|
|
37
|
-
import '../../core/Link/Link.js';
|
|
38
|
-
import '../../core/Modal/Modal.js';
|
|
39
|
-
import '../../core/ModalStack/ModalStack.js';
|
|
40
|
-
import '../../core/PageHeading/PageHeading.js';
|
|
41
|
-
import '../../core/Pagination/Pagination.js';
|
|
42
|
-
import '../../core/Popover/Popover.js';
|
|
43
|
-
import '../../core/Popover/PopoverContext.js';
|
|
44
|
-
import '../../core/Popover/PopoverBody.js';
|
|
45
|
-
import '../../core/Progress/Progress.js';
|
|
46
|
-
import '../../core/Rating/Rating.js';
|
|
47
|
-
import '../../core/ScrollArea/ScrollArea.js';
|
|
48
|
-
import '../../core/ScrollArea/smooth/SmoothScrollEngine.js';
|
|
49
|
-
import '../../core/Segmented/Segmented.js';
|
|
50
|
-
import '../../core/Skeleton/Skeleton.js';
|
|
51
|
-
import '../../core/SlidingNumber/SlidingNumber.js';
|
|
52
|
-
import '../../core/Tabs/Tabs.js';
|
|
53
|
-
import '../../core/Tabs/TabsList.js';
|
|
54
|
-
import '../../core/Tabs/TabsTrigger.js';
|
|
55
|
-
import '../../core/Tabs/TabsBody.js';
|
|
56
|
-
import '../../core/Tabs/TabsContext.js';
|
|
57
|
-
import '../../core/Tooltip/Tooltip.js';
|
|
58
|
-
import '../../core/Tooltip/Tooltip.animations.js';
|
|
59
|
-
import '../../core/Tree/Tree.js';
|
|
60
|
-
import '../../core/Tag/Tag.js';
|
|
61
|
-
import '../../core/Alert/Alert.js';
|
|
62
|
-
import '../../core/Toast/Toast.js';
|
|
63
|
-
import '../../core/Toast/ToastProvider.js';
|
|
64
|
-
import '@heroicons/react/24/solid';
|
|
65
|
-
import '../../core/Spinner/Spinner.js';
|
|
66
|
-
import '../../core/Message/Message.js';
|
|
67
|
-
import '../../core/Message/TypeWriter.js';
|
|
68
|
-
import '../../core/Message/MessageBody.js';
|
|
69
|
-
import '@heroicons/react/16/solid';
|
|
70
|
-
import '../../core/Empty/Empty.js';
|
|
71
|
-
import '../../core/Masonry/Masonry.js';
|
|
72
|
-
import '../../core/DragDrop/DragDrop.js';
|
|
73
|
-
import '../../core/Sortable/Sortable.js';
|
|
74
|
-
import '../../core/NavItem/NavItem.js';
|
|
75
|
-
import '../../core/Sidebar/Sidebar.js';
|
|
76
|
-
import '../../core/Sidebar/SidebarHeader.js';
|
|
77
|
-
import '../../core/Sidebar/SidebarContent.js';
|
|
78
|
-
import '../../core/Sidebar/SidebarFooter.js';
|
|
79
|
-
import '../../core/Sidebar/SidebarNav.js';
|
|
80
|
-
import '../../core/Sidebar/SidebarNavGroup.js';
|
|
81
|
-
import '../../core/Sidebar/SidebarToggle.js';
|
|
82
|
-
import '../../core/Sidebar/SidebarMobileTrigger.js';
|
|
83
|
-
import '../../core/Sidebar/SidebarUserProfile.js';
|
|
84
|
-
import '../../core/Sidebar/SidebarLogo.js';
|
|
85
|
-
import '../../core/Sidebar/SidebarContext.js';
|
|
86
|
-
import '../../core/OfflineIndicator/OfflineIndicator.js';
|
|
87
|
-
import '../../core/ContextMenu/ContextMenu.js';
|
|
88
|
-
import '../../core/ContextMenu/ContextMenu.theme.js';
|
|
89
|
-
import '../../core/Pill/Pill.js';
|
|
90
|
-
import '../../core/Icon/Icon.js';
|
|
91
|
-
import '../../core/ImagePlaceholder/ImagePlaceholder.js';
|
|
92
8
|
import { FormLabel } from '../FormLabel/FormLabel.js';
|
|
9
|
+
import { Button } from '../../core/Button/Button.js';
|
|
93
10
|
|
|
94
11
|
/**
|
|
95
12
|
* FileUpload component - Drag-and-drop file uploader with previews
|
|
@@ -111,7 +28,7 @@ import { FormLabel } from '../FormLabel/FormLabel.js';
|
|
|
111
28
|
* onUpload={(files) => console.log(files)}
|
|
112
29
|
* />
|
|
113
30
|
*/
|
|
114
|
-
const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSize, maxFiles, state = "default", disabled = false, label, errorMessage, onUpload, onRemove, onError, showPreview = true, buttonText = "Choose files", helperText = "or drag and drop", description, className, theme: customTheme, ...props }, ref) => {
|
|
31
|
+
const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSize, maxFiles, state = "default", disabled = false, label, errorMessage, value, defaultFiles, onChange, onUpload, onRemove, onError, showPreview = true, showIcon = true, buttonText = "Choose files", helperText = "or drag and drop", description, className, theme: customTheme, ...props }, ref) => {
|
|
115
32
|
// Merge custom theme with default theme
|
|
116
33
|
const theme = useMemo(() => customTheme
|
|
117
34
|
? { ...fileUploadTheme, ...customTheme }
|
|
@@ -119,10 +36,39 @@ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSiz
|
|
|
119
36
|
const generatedId = useId();
|
|
120
37
|
const isDisabled = state === "disabled" || disabled;
|
|
121
38
|
const isInvalid = state === "invalid";
|
|
39
|
+
// Wire helper/error text to the control for screen readers.
|
|
40
|
+
const describedBy = [
|
|
41
|
+
description ? `${generatedId}-description` : null,
|
|
42
|
+
errorMessage ? `${generatedId}-error` : null,
|
|
43
|
+
]
|
|
44
|
+
.filter(Boolean)
|
|
45
|
+
.join(" ") || undefined;
|
|
46
|
+
const shouldReduceMotion = useReducedMotion();
|
|
47
|
+
// Stable key per File reference — index keys would break exit/reflow
|
|
48
|
+
// animations as the list reorders. WeakMap so removed files are GC'd.
|
|
49
|
+
const fileKeysRef = useRef(new WeakMap());
|
|
50
|
+
const keyCounterRef = useRef(0);
|
|
51
|
+
const getFileKey = useCallback((file) => {
|
|
52
|
+
let key = fileKeysRef.current.get(file);
|
|
53
|
+
if (!key) {
|
|
54
|
+
key = `file-${keyCounterRef.current++}`;
|
|
55
|
+
fileKeysRef.current.set(file, key);
|
|
56
|
+
}
|
|
57
|
+
return key;
|
|
58
|
+
}, []);
|
|
122
59
|
const inputRef = useRef(null);
|
|
123
60
|
const [isDragActive, setIsDragActive] = useState(false);
|
|
124
|
-
|
|
61
|
+
// Controlled when `value` is provided; otherwise track the list internally.
|
|
62
|
+
const isControlled = value !== undefined;
|
|
63
|
+
const [internalFiles, setInternalFiles] = useState(defaultFiles !== null && defaultFiles !== void 0 ? defaultFiles : []);
|
|
64
|
+
const selectedFiles = isControlled ? value : internalFiles;
|
|
125
65
|
const [previewUrls, setPreviewUrls] = useState(new Map());
|
|
66
|
+
// Commit a new list: update internal state when uncontrolled, always notify.
|
|
67
|
+
const commitFiles = useCallback((next) => {
|
|
68
|
+
if (!isControlled)
|
|
69
|
+
setInternalFiles(next);
|
|
70
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(next);
|
|
71
|
+
}, [isControlled, onChange]);
|
|
126
72
|
// Convert accept prop to array
|
|
127
73
|
const acceptTypes = Array.isArray(accept) ? accept : accept ? [accept] : [];
|
|
128
74
|
const acceptString = acceptTypes.join(",");
|
|
@@ -150,25 +96,40 @@ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSiz
|
|
|
150
96
|
return true;
|
|
151
97
|
return file.size <= maxSize;
|
|
152
98
|
}, [maxSize]);
|
|
153
|
-
//
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
99
|
+
// Keep image preview URLs in sync with the current list. Runs for files added
|
|
100
|
+
// via the dropzone as well as files injected through `value`/`defaultFiles`.
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
setPreviewUrls((prev) => {
|
|
103
|
+
const next = new Map();
|
|
104
|
+
let changed = false;
|
|
105
|
+
for (const file of selectedFiles) {
|
|
106
|
+
if (!file.type.startsWith("image/"))
|
|
107
|
+
continue;
|
|
108
|
+
const existing = prev.get(file);
|
|
109
|
+
if (existing) {
|
|
110
|
+
next.set(file, existing);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
next.set(file, URL.createObjectURL(file));
|
|
114
|
+
changed = true;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Revoke URLs for files no longer present.
|
|
118
|
+
for (const [file, url] of prev) {
|
|
119
|
+
if (!next.has(file)) {
|
|
120
|
+
URL.revokeObjectURL(url);
|
|
121
|
+
changed = true;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return changed ? next : prev;
|
|
125
|
+
});
|
|
126
|
+
}, [selectedFiles]);
|
|
127
|
+
// Revoke any outstanding object URLs on unmount.
|
|
128
|
+
const previewUrlsRef = useRef(previewUrls);
|
|
129
|
+
previewUrlsRef.current = previewUrls;
|
|
130
|
+
useEffect(() => () => {
|
|
131
|
+
previewUrlsRef.current.forEach((url) => URL.revokeObjectURL(url));
|
|
159
132
|
}, []);
|
|
160
|
-
// Clean up preview URLs
|
|
161
|
-
const revokePreview = useCallback((file) => {
|
|
162
|
-
const url = previewUrls.get(file);
|
|
163
|
-
if (url) {
|
|
164
|
-
URL.revokeObjectURL(url);
|
|
165
|
-
setPreviewUrls((prev) => {
|
|
166
|
-
const newMap = new Map(prev);
|
|
167
|
-
newMap.delete(file);
|
|
168
|
-
return newMap;
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
}, [previewUrls]);
|
|
172
133
|
// Handle file selection/drop
|
|
173
134
|
const handleFiles = useCallback((files) => {
|
|
174
135
|
if (!files || files.length === 0)
|
|
@@ -209,14 +170,13 @@ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSiz
|
|
|
209
170
|
onError === null || onError === void 0 ? void 0 : onError(error);
|
|
210
171
|
return;
|
|
211
172
|
}
|
|
212
|
-
//
|
|
173
|
+
// Append when multiple, otherwise replace. Previews are handled by the
|
|
174
|
+
// sync effect above.
|
|
213
175
|
const newFiles = multiple
|
|
214
176
|
? [...selectedFiles, ...validFiles]
|
|
215
177
|
: validFiles;
|
|
216
|
-
|
|
217
|
-
//
|
|
218
|
-
validFiles.forEach(createPreview);
|
|
219
|
-
// Call onUpload callback
|
|
178
|
+
commitFiles(newFiles);
|
|
179
|
+
// Call onUpload callback with only the newly added files
|
|
220
180
|
onUpload === null || onUpload === void 0 ? void 0 : onUpload(validFiles);
|
|
221
181
|
}, [
|
|
222
182
|
isValidFileType,
|
|
@@ -227,7 +187,7 @@ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSiz
|
|
|
227
187
|
multiple,
|
|
228
188
|
onUpload,
|
|
229
189
|
onError,
|
|
230
|
-
|
|
190
|
+
commitFiles,
|
|
231
191
|
]);
|
|
232
192
|
// Handle drag events
|
|
233
193
|
const handleDragEnter = useCallback((e) => {
|
|
@@ -269,32 +229,23 @@ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSiz
|
|
|
269
229
|
}, [handleFiles]);
|
|
270
230
|
// Handle file removal
|
|
271
231
|
const handleRemoveFile = useCallback((file) => {
|
|
272
|
-
|
|
273
|
-
|
|
232
|
+
// Preview cleanup is handled by the sync effect.
|
|
233
|
+
commitFiles(selectedFiles.filter((f) => f !== file));
|
|
274
234
|
onRemove === null || onRemove === void 0 ? void 0 : onRemove(file);
|
|
275
|
-
}, [
|
|
276
|
-
|
|
277
|
-
const formatFileSize = (bytes) => {
|
|
278
|
-
if (bytes === 0)
|
|
279
|
-
return "0 Bytes";
|
|
280
|
-
const k = 1024;
|
|
281
|
-
const sizes = ["Bytes", "KB", "MB", "GB"];
|
|
282
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
283
|
-
return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + " " + sizes[i];
|
|
284
|
-
};
|
|
285
|
-
return (jsxs("div", { ref: ref, className: cn(theme.containerStyle, className), ...props, children: [label && (typeof label === "string" ? (jsx(FormLabel, { htmlFor: `${generatedId}-input`, state: isDisabled ? "disabled" : isInvalid ? "invalid" : "default", children: label })) : (label)), jsx("input", { ref: inputRef, id: `${generatedId}-input`, type: "file", accept: acceptString, multiple: multiple, onChange: handleInputChange, disabled: isDisabled, className: "sr-only", "aria-label": "File upload" }), jsx("div", { className: cn(theme.dropzoneStyle, isDragActive && theme.dropzoneActiveStyle, isDisabled && theme.dropzoneDisabledStyle, isInvalid && "border-[var(--color-danger)]"), onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, onClick: handleClick, role: "button", tabIndex: isDisabled ? -1 : 0, "aria-disabled": isDisabled, "aria-invalid": isInvalid || undefined, onKeyDown: (e) => {
|
|
235
|
+
}, [commitFiles, selectedFiles, onRemove]);
|
|
236
|
+
return (jsxs("div", { ref: ref, className: cn(theme.containerStyle, className), ...props, children: [label && (typeof label === "string" ? (jsx(FormLabel, { htmlFor: `${generatedId}-input`, state: isDisabled ? "disabled" : isInvalid ? "invalid" : "default", children: label })) : (label)), jsx("input", { ref: inputRef, id: `${generatedId}-input`, type: "file", accept: acceptString, multiple: multiple, onChange: handleInputChange, disabled: isDisabled, className: "sr-only", "aria-label": "File upload", "aria-invalid": isInvalid || undefined, "aria-describedby": describedBy }), jsx("div", { className: cn(theme.dropzoneStyle, isDragActive && theme.dropzoneActiveStyle, isDisabled && theme.dropzoneDisabledStyle, isInvalid && "border-[var(--color-danger)]"), onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, onClick: handleClick, role: "button", tabIndex: isDisabled ? -1 : 0, "aria-disabled": isDisabled, "aria-invalid": isInvalid || undefined, "aria-describedby": describedBy, onKeyDown: (e) => {
|
|
286
237
|
if (e.key === "Enter" || e.key === " ") {
|
|
287
238
|
e.preventDefault();
|
|
288
239
|
handleClick();
|
|
289
240
|
}
|
|
290
|
-
}, children: jsxs("div", { className:
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
241
|
+
}, children: jsxs("div", { className: "flex flex-col items-center text-center pointer-events-none", children: [showIcon && (jsx("div", { className: "size-10 border border-[var(--color-border)] bg-[var(--color-surface-raised)] rounded-full flex items-center justify-center mb-3", children: jsx(CloudArrowUpIcon, { className: "size-6 text-[var(--color-text-secondary)]" }) })), jsxs("p", { className: "text-sm font-medium text-[var(--color-text-primary)]/80", children: [jsx("span", { className: "text-[var(--color-primary)]", children: buttonText }), " ", helperText] }), description && (jsx("p", { id: `${generatedId}-description`, className: "text-xs text-[var(--color-text-muted)] mt-0.5", children: description }))] }) }), errorMessage && (jsx("div", { id: `${generatedId}-error`, className: "text-sm mt-1 text-[var(--color-danger)]", children: errorMessage })), showPreview && selectedFiles.length > 0 && (jsx("div", { className: theme.previewContainerStyle, children: jsx(AnimatePresence, { initial: false, children: selectedFiles.map((file) => {
|
|
242
|
+
const previewUrl = previewUrls.get(file);
|
|
243
|
+
const isImage = file.type.startsWith("image/");
|
|
244
|
+
return (jsxs(motion.div, { layout: !shouldReduceMotion, initial: shouldReduceMotion ? false : PREVIEW_ITEM.initial, animate: PREVIEW_ITEM.animate, exit: shouldReduceMotion ? { opacity: 0 } : PREVIEW_ITEM.exit, transition: PREVIEW_LAYOUT_SPRING, className: theme.previewItemStyle, children: [isImage && previewUrl ? (jsx("img", { src: previewUrl, alt: file.name, className: theme.previewImageStyle })) : (jsx("div", { className: theme.previewFileStyle, title: file.name, children: jsx(DocumentIcon, { className: "size-6" }) })), jsx(Button, { variant: "soft", color: "danger", size: "sm", iconOnly: true, onClick: (e) => {
|
|
245
|
+
e.stopPropagation();
|
|
246
|
+
handleRemoveFile(file);
|
|
247
|
+
}, "aria-label": `Remove ${file.name}`, className: cn(theme.removeButtonStyle, "rounded-full !p-0 size-6"), children: jsx(XMarkIcon, { className: "size-4", strokeWidth: 2 }) })] }, getFileKey(file)));
|
|
248
|
+
}) }) }))] }));
|
|
298
249
|
});
|
|
299
250
|
FileUpload.displayName = "FileUpload";
|
|
300
251
|
|
|
@@ -1,25 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Theme for the FileUpload component.
|
|
3
|
+
* Uses production-ready CSS variables from theme.css.
|
|
3
4
|
*/
|
|
4
5
|
interface FileUploadTheme {
|
|
5
6
|
containerStyle: string;
|
|
6
7
|
dropzoneStyle: string;
|
|
7
8
|
dropzoneActiveStyle: string;
|
|
8
9
|
dropzoneDisabledStyle: string;
|
|
9
|
-
contentStyle: string;
|
|
10
|
-
iconStyle: string;
|
|
11
|
-
textStyle: string;
|
|
12
|
-
helperTextStyle: string;
|
|
13
|
-
descriptionStyle: string;
|
|
14
10
|
previewContainerStyle: string;
|
|
15
11
|
previewItemStyle: string;
|
|
16
12
|
previewImageStyle: string;
|
|
17
13
|
previewFileStyle: string;
|
|
18
14
|
removeButtonStyle: string;
|
|
19
15
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Default theme for the FileUpload component
|
|
22
|
-
* Uses production-ready CSS variables from global.scss
|
|
23
|
-
*/
|
|
24
16
|
export declare const fileUploadTheme: FileUploadTheme;
|
|
25
17
|
export {};
|
|
@@ -1,36 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Default theme for the FileUpload component
|
|
3
|
-
* Uses production-ready CSS variables from global.scss
|
|
4
|
-
*/
|
|
5
1
|
const fileUploadTheme = {
|
|
6
|
-
//
|
|
2
|
+
// Root container
|
|
7
3
|
containerStyle: "w-full",
|
|
8
4
|
// Dropzone area (default state)
|
|
9
|
-
dropzoneStyle: "relative flex flex-col items-center justify-center w-full min-h-[160px] p-6 border border-dashed border-[var(--color-border)] rounded-[var(--form-radius)] bg-[var(--color-
|
|
10
|
-
//
|
|
11
|
-
dropzoneActiveStyle: "border-[var(--color-primary)] bg-[var(--color-primary
|
|
12
|
-
//
|
|
13
|
-
dropzoneDisabledStyle: "cursor-not-allowed opacity-60 hover:bg-[var(--color-
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
//
|
|
19
|
-
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
// Preview container
|
|
25
|
-
previewContainerStyle: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4 mt-4",
|
|
26
|
-
// Individual preview item
|
|
27
|
-
previewItemStyle: "relative group rounded-[var(--radius-base)] border border-[var(--color-border)] overflow-hidden bg-[var(--color-background-secondary)]",
|
|
28
|
-
// Preview image
|
|
29
|
-
previewImageStyle: "w-full h-32 object-cover",
|
|
30
|
-
// Preview file (non-image)
|
|
31
|
-
previewFileStyle: "flex items-center justify-center w-full h-32 p-3 text-sm text-[var(--color-text-secondary)] text-center break-all",
|
|
32
|
-
// Remove button
|
|
33
|
-
removeButtonStyle: "absolute top-1 right-1 -translate-y-1 opacity-0 group-hover:opacity-100 transition-all duration-400 group-hover:-translate-y-0",
|
|
5
|
+
dropzoneStyle: "relative flex flex-col items-center justify-center w-full min-h-[160px] p-6 border border-dashed border-[var(--color-border)] rounded-[var(--form-radius)] bg-[var(--color-surface)] hover:border-[var(--color-border-hover)] transition-colors duration-400 cursor-pointer",
|
|
6
|
+
// Dragging over — translucent primary tint composites over the surface in both modes
|
|
7
|
+
dropzoneActiveStyle: "border-solid border-[var(--color-primary)] bg-[var(--color-primary)]/5",
|
|
8
|
+
// Disabled
|
|
9
|
+
dropzoneDisabledStyle: "cursor-not-allowed opacity-60 hover:bg-[var(--color-surface)] hover:border-[var(--color-border)]",
|
|
10
|
+
// Wrapping row of fixed-width thumbnails (not a stretch grid)
|
|
11
|
+
previewContainerStyle: "flex flex-wrap gap-1 mt-2",
|
|
12
|
+
// Fixed responsive thumbnail — stays small on large containers, wraps to more-per-row
|
|
13
|
+
previewItemStyle: "relative group shrink-0 size-10 sm:size-12 md:size-16 rounded-[var(--radius-base)] border border-[var(--color-border)] overflow-hidden bg-[var(--color-surface)]",
|
|
14
|
+
// Image fills the thumbnail box
|
|
15
|
+
previewImageStyle: "size-full object-cover",
|
|
16
|
+
// Non-image tile — centered document icon (filename surfaced via title tooltip)
|
|
17
|
+
previewFileStyle: "flex items-center justify-center size-full text-[var(--color-text-muted)]",
|
|
18
|
+
// Remove button (revealed on item hover)
|
|
19
|
+
removeButtonStyle: "absolute top-1 right-1 -translate-y-1 opacity-0 group-hover:opacity-100 transition-all duration-400 group-hover:-translate-y-0",
|
|
34
20
|
};
|
|
35
21
|
|
|
36
22
|
export { fileUploadTheme };
|
|
@@ -4,7 +4,7 @@ export type FileUploadState = "default" | "disabled" | "invalid";
|
|
|
4
4
|
* FileUpload component props
|
|
5
5
|
* Supports both click-to-upload and drag-and-drop
|
|
6
6
|
*/
|
|
7
|
-
export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onError'> {
|
|
7
|
+
export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onError' | 'onChange'> {
|
|
8
8
|
/**
|
|
9
9
|
* Accepted file types (MIME types or file extensions)
|
|
10
10
|
* @example ["image/*", ".pdf", ".doc"]
|
|
@@ -43,7 +43,22 @@ export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElemen
|
|
|
43
43
|
*/
|
|
44
44
|
errorMessage?: React.ReactNode;
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
46
|
+
* Controlled file list. When provided, the component is controlled and the
|
|
47
|
+
* parent owns the list — pair with `onChange`. Leave undefined for the
|
|
48
|
+
* uncontrolled behavior (the component tracks its own list internally).
|
|
49
|
+
*/
|
|
50
|
+
value?: File[];
|
|
51
|
+
/**
|
|
52
|
+
* Initial file list for the uncontrolled case. Ignored when `value` is set.
|
|
53
|
+
*/
|
|
54
|
+
defaultFiles?: File[];
|
|
55
|
+
/**
|
|
56
|
+
* Callback fired whenever the full file list changes (add or remove),
|
|
57
|
+
* with the complete next list. Required to read state in controlled mode.
|
|
58
|
+
*/
|
|
59
|
+
onChange?: (files: File[]) => void;
|
|
60
|
+
/**
|
|
61
|
+
* Callback when files are selected/dropped, with only the newly added files.
|
|
47
62
|
*/
|
|
48
63
|
onUpload?: (files: File[]) => void;
|
|
49
64
|
/**
|
|
@@ -59,20 +74,26 @@ export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElemen
|
|
|
59
74
|
* @default true
|
|
60
75
|
*/
|
|
61
76
|
showPreview?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Show the upload icon inside the dropzone. Set `false` for slim/compact
|
|
79
|
+
* containers where the icon would crowd the text.
|
|
80
|
+
* @default true
|
|
81
|
+
*/
|
|
82
|
+
showIcon?: boolean;
|
|
62
83
|
/**
|
|
63
84
|
* Custom upload button text
|
|
64
85
|
* @default "Choose files"
|
|
65
86
|
*/
|
|
66
|
-
buttonText?:
|
|
87
|
+
buttonText?: React.ReactNode;
|
|
67
88
|
/**
|
|
68
89
|
* Custom dropzone helper text
|
|
69
90
|
* @default "or drag and drop"
|
|
70
91
|
*/
|
|
71
|
-
helperText?:
|
|
92
|
+
helperText?: React.ReactNode;
|
|
72
93
|
/**
|
|
73
94
|
* Helper text displayed below the upload area
|
|
74
95
|
*/
|
|
75
|
-
description?:
|
|
96
|
+
description?: React.ReactNode;
|
|
76
97
|
/**
|
|
77
98
|
* Custom CSS class for the container
|
|
78
99
|
*/
|
|
@@ -96,11 +117,6 @@ export interface FileUploadThemeOverrides {
|
|
|
96
117
|
dropzoneStyle?: string;
|
|
97
118
|
dropzoneActiveStyle?: string;
|
|
98
119
|
dropzoneDisabledStyle?: string;
|
|
99
|
-
contentStyle?: string;
|
|
100
|
-
iconStyle?: string;
|
|
101
|
-
textStyle?: string;
|
|
102
|
-
helperTextStyle?: string;
|
|
103
|
-
descriptionStyle?: string;
|
|
104
120
|
previewContainerStyle?: string;
|
|
105
121
|
previewItemStyle?: string;
|
|
106
122
|
previewImageStyle?: string;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
const formLabelTheme = {
|
|
5
5
|
// Base styles for the label element
|
|
6
|
-
baseStyle: "block text-sm/6 font-medium mb-
|
|
6
|
+
baseStyle: "block text-sm/6 font-medium mb-1",
|
|
7
7
|
// State variants - using design tokens from global.scss
|
|
8
8
|
stateStyles: {
|
|
9
9
|
default: "text-[var(--color-text-primary)]",
|
|
@@ -9,14 +9,16 @@ const inputTheme = {
|
|
|
9
9
|
wrapperStyle: formsBaseTheme.wrapperStyle,
|
|
10
10
|
// Input group styles - no focus-within (focus is managed via JS for contentStart/contentEnd compatibility)
|
|
11
11
|
inputGroupStyle: "relative flex rounded-[var(--form-radius)] shadow-[inset_0_0_0_1px_var(--color-border)] " +
|
|
12
|
-
"bg-
|
|
13
|
-
|
|
12
|
+
"bg-[var(--color-surface)] transition-all " +
|
|
13
|
+
// Hover edge: strengthen the border to --color-border-secondary on hover. Scoped with
|
|
14
|
+
// not-focus-within so the JS-driven focus border (primary) always wins.
|
|
15
|
+
"not-focus-within:hover:shadow-[inset_0_0_0_1px_var(--color-border-secondary)]",
|
|
14
16
|
// JS-driven focus ring (applied when isFocused is true)
|
|
15
|
-
inputGroupFocusStyle: "shadow-[
|
|
16
|
-
"dark:shadow-[
|
|
17
|
+
inputGroupFocusStyle: "shadow-[inset_0_0_0_1px_var(--color-primary-600)] ring-4 ring-[var(--color-primary)]/10 " +
|
|
18
|
+
"dark:shadow-[inset_0_0_0_1px_var(--color-primary-500)] dark:ring-[var(--color-primary-500)]/20",
|
|
17
19
|
// JS-driven focus ring for invalid state
|
|
18
|
-
inputGroupFocusInvalidStyle: "shadow-[
|
|
19
|
-
"dark:shadow-[
|
|
20
|
+
inputGroupFocusInvalidStyle: "shadow-[inset_0_0_0_1px_var(--color-danger)] ring-4 ring-[var(--color-danger)]/10 " +
|
|
21
|
+
"dark:shadow-[inset_0_0_0_1px_var(--color-danger-500)] dark:ring-[var(--color-danger-500)]/20",
|
|
20
22
|
// Base input styles - extends common form control with design tokens
|
|
21
23
|
baseStyle: `${formsBaseTheme.controlBaseStyle} py-2 px-3`,
|
|
22
24
|
// Size variants - composed from atomic tokens
|
|
@@ -30,7 +32,10 @@ const inputTheme = {
|
|
|
30
32
|
default: formsBaseTheme.states.default,
|
|
31
33
|
disabled: formsBaseTheme.states.disabled,
|
|
32
34
|
invalid: "shadow-[inset_0_0_0_1px_var(--color-danger)] bg-[var(--color-danger-50)] " +
|
|
33
|
-
|
|
35
|
+
// Keep the danger border on hover (don't let the hover edge override it)
|
|
36
|
+
"not-focus-within:hover:shadow-[inset_0_0_0_1px_var(--color-danger)] " +
|
|
37
|
+
"dark:bg-[var(--color-danger-950)]/30 dark:shadow-[inset_0_0_0_1px_var(--color-danger-500)] " +
|
|
38
|
+
"dark:not-focus-within:hover:shadow-[inset_0_0_0_1px_var(--color-danger-500)]",
|
|
34
39
|
},
|
|
35
40
|
// Helper text styles with state handling
|
|
36
41
|
helperText: formsBaseTheme.helperText,
|
|
@@ -66,9 +71,7 @@ const inputTheme = {
|
|
|
66
71
|
numberButtonsContainerStyle: "absolute inset-y-0 right-0 flex flex-row items-center pr-2 z-10 gap-1",
|
|
67
72
|
numberButtonStyle: "bg-[var(--color-background-secondary)] flex items-center justify-center " +
|
|
68
73
|
"text-[var(--color-text-muted)] hover:bg-[var(--color-surface-hover)] " +
|
|
69
|
-
"hover:text-[var(--color-text-primary)] cursor-pointer size-6 rounded-sm transition-colors
|
|
70
|
-
"dark:bg-[var(--color-neutral-800)] dark:text-[var(--color-neutral-500)] " +
|
|
71
|
-
"dark:hover:bg-[var(--color-neutral-700)] dark:hover:text-[var(--color-neutral-200)]",
|
|
74
|
+
"hover:text-[var(--color-text-primary)] cursor-pointer size-6 rounded-sm transition-colors",
|
|
72
75
|
// Type-specific styles organized by input type
|
|
73
76
|
typeStyles: {
|
|
74
77
|
password: {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Follows Flikkui design system with CSS variables
|
|
4
4
|
*/
|
|
5
5
|
const inputCounterTheme = {
|
|
6
|
-
baseStyle: "flex items-center gap-3 transition-all p-1 border border-[var(--color-border)] rounded-[var(--form-radius)] w-fit",
|
|
6
|
+
baseStyle: "flex items-center gap-3 transition-all p-1 bg-[var(--color-surface)] border border-[var(--color-border)] rounded-[var(--form-radius)] w-fit",
|
|
7
7
|
buttonWrapperStyle: "flex-shrink-0",
|
|
8
8
|
numberStyle: "min-w-fit text-center text-sm font-medium text-[var(--color-text-primary)] tabular-nums select-none",
|
|
9
9
|
};
|