@docyrus/shadcn 1.0.0 → 1.2.0
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/README.md +12 -3
- package/dist/base-lyra/accordion.js.map +1 -1
- package/dist/base-lyra/alert-dialog.js.map +1 -1
- package/dist/base-lyra/alert.js.map +1 -1
- package/dist/base-lyra/aspect-ratio.js.map +1 -1
- package/dist/base-lyra/avatar.js.map +1 -1
- package/dist/base-lyra/badge.js.map +1 -1
- package/dist/base-lyra/breadcrumb.js.map +1 -1
- package/dist/base-lyra/button-group.js.map +1 -1
- package/dist/base-lyra/button.js.map +1 -1
- package/dist/base-lyra/calendar.js.map +1 -1
- package/dist/base-lyra/card.js.map +1 -1
- package/dist/base-lyra/carousel.js.map +1 -1
- package/dist/base-lyra/chart.js.map +1 -1
- package/dist/base-lyra/checkbox.js.map +1 -1
- package/dist/base-lyra/combobox.js.map +1 -1
- package/dist/base-lyra/command.js.map +1 -1
- package/dist/base-lyra/context-menu.js.map +1 -1
- package/dist/base-lyra/dialog.js.map +1 -1
- package/dist/base-lyra/drawer.js.map +1 -1
- package/dist/base-lyra/dropdown-menu.js.map +1 -1
- package/dist/base-lyra/empty.js.map +1 -1
- package/dist/base-lyra/field.js.map +1 -1
- package/dist/base-lyra/hover-card.js.map +1 -1
- package/dist/base-lyra/index.js +8 -6
- package/dist/base-lyra/index.js.map +1 -1
- package/dist/base-lyra/input-group.js.map +1 -1
- package/dist/base-lyra/input-otp.js.map +1 -1
- package/dist/base-lyra/input.js.map +1 -1
- package/dist/base-lyra/item.js.map +1 -1
- package/dist/base-lyra/kbd.js.map +1 -1
- package/dist/base-lyra/label.js.map +1 -1
- package/dist/base-lyra/menubar.js.map +1 -1
- package/dist/base-lyra/native-select.js.map +1 -1
- package/dist/base-lyra/navigation-menu.js.map +1 -1
- package/dist/base-lyra/pagination.js.map +1 -1
- package/dist/base-lyra/popover.js.map +1 -1
- package/dist/base-lyra/progress.js.map +1 -1
- package/dist/base-lyra/radio-group.js.map +1 -1
- package/dist/base-lyra/resizable.js.map +1 -1
- package/dist/base-lyra/scroll-area.js.map +1 -1
- package/dist/base-lyra/select.js.map +1 -1
- package/dist/base-lyra/separator.js.map +1 -1
- package/dist/base-lyra/sheet.js.map +1 -1
- package/dist/base-lyra/sidebar.js +8 -6
- package/dist/base-lyra/sidebar.js.map +1 -1
- package/dist/base-lyra/skeleton.js.map +1 -1
- package/dist/base-lyra/slider.js.map +1 -1
- package/dist/base-lyra/spinner.js.map +1 -1
- package/dist/base-lyra/switch.js.map +1 -1
- package/dist/base-lyra/table.js.map +1 -1
- package/dist/base-lyra/tabs.js.map +1 -1
- package/dist/base-lyra/textarea.js.map +1 -1
- package/dist/base-lyra/toggle-group.js.map +1 -1
- package/dist/base-lyra/toggle.js.map +1 -1
- package/dist/base-lyra/tooltip.js.map +1 -1
- package/dist/base-maia/accordion.js.map +1 -1
- package/dist/base-maia/alert-dialog.js.map +1 -1
- package/dist/base-maia/alert.js.map +1 -1
- package/dist/base-maia/aspect-ratio.js.map +1 -1
- package/dist/base-maia/avatar.js.map +1 -1
- package/dist/base-maia/badge.js.map +1 -1
- package/dist/base-maia/breadcrumb.js.map +1 -1
- package/dist/base-maia/button-group.js.map +1 -1
- package/dist/base-maia/button.js.map +1 -1
- package/dist/base-maia/calendar.js.map +1 -1
- package/dist/base-maia/card.js.map +1 -1
- package/dist/base-maia/carousel.js.map +1 -1
- package/dist/base-maia/chart.js.map +1 -1
- package/dist/base-maia/checkbox.js.map +1 -1
- package/dist/base-maia/combobox.js.map +1 -1
- package/dist/base-maia/command.js.map +1 -1
- package/dist/base-maia/context-menu.js.map +1 -1
- package/dist/base-maia/dialog.js.map +1 -1
- package/dist/base-maia/drawer.js.map +1 -1
- package/dist/base-maia/dropdown-menu.js.map +1 -1
- package/dist/base-maia/empty.js.map +1 -1
- package/dist/base-maia/field.js.map +1 -1
- package/dist/base-maia/hover-card.js.map +1 -1
- package/dist/base-maia/index.js +8 -6
- package/dist/base-maia/index.js.map +1 -1
- package/dist/base-maia/input-group.js.map +1 -1
- package/dist/base-maia/input-otp.js.map +1 -1
- package/dist/base-maia/input.js.map +1 -1
- package/dist/base-maia/item.js.map +1 -1
- package/dist/base-maia/kbd.js.map +1 -1
- package/dist/base-maia/label.js.map +1 -1
- package/dist/base-maia/menubar.js.map +1 -1
- package/dist/base-maia/native-select.js.map +1 -1
- package/dist/base-maia/navigation-menu.js.map +1 -1
- package/dist/base-maia/pagination.js.map +1 -1
- package/dist/base-maia/popover.js.map +1 -1
- package/dist/base-maia/progress.js.map +1 -1
- package/dist/base-maia/radio-group.js.map +1 -1
- package/dist/base-maia/resizable.js.map +1 -1
- package/dist/base-maia/scroll-area.js.map +1 -1
- package/dist/base-maia/select.js.map +1 -1
- package/dist/base-maia/separator.js.map +1 -1
- package/dist/base-maia/sheet.js.map +1 -1
- package/dist/base-maia/sidebar.js +8 -6
- package/dist/base-maia/sidebar.js.map +1 -1
- package/dist/base-maia/skeleton.js.map +1 -1
- package/dist/base-maia/slider.js.map +1 -1
- package/dist/base-maia/spinner.js.map +1 -1
- package/dist/base-maia/switch.js.map +1 -1
- package/dist/base-maia/table.js.map +1 -1
- package/dist/base-maia/tabs.js.map +1 -1
- package/dist/base-maia/textarea.js.map +1 -1
- package/dist/base-maia/toggle-group.js.map +1 -1
- package/dist/base-maia/toggle.js.map +1 -1
- package/dist/base-maia/tooltip.js.map +1 -1
- package/dist/base-mira/accordion.js.map +1 -1
- package/dist/base-mira/alert-dialog.js.map +1 -1
- package/dist/base-mira/alert.js.map +1 -1
- package/dist/base-mira/aspect-ratio.js.map +1 -1
- package/dist/base-mira/avatar.js.map +1 -1
- package/dist/base-mira/badge.js.map +1 -1
- package/dist/base-mira/breadcrumb.js.map +1 -1
- package/dist/base-mira/button-group.js.map +1 -1
- package/dist/base-mira/button.js.map +1 -1
- package/dist/base-mira/calendar.js.map +1 -1
- package/dist/base-mira/card.js.map +1 -1
- package/dist/base-mira/carousel.js.map +1 -1
- package/dist/base-mira/chart.js.map +1 -1
- package/dist/base-mira/checkbox.js.map +1 -1
- package/dist/base-mira/combobox.js.map +1 -1
- package/dist/base-mira/command.js.map +1 -1
- package/dist/base-mira/context-menu.js.map +1 -1
- package/dist/base-mira/dialog.js.map +1 -1
- package/dist/base-mira/drawer.js.map +1 -1
- package/dist/base-mira/dropdown-menu.js.map +1 -1
- package/dist/base-mira/empty.js.map +1 -1
- package/dist/base-mira/field.js.map +1 -1
- package/dist/base-mira/hover-card.js.map +1 -1
- package/dist/base-mira/index.js +8 -6
- package/dist/base-mira/index.js.map +1 -1
- package/dist/base-mira/input-group.js.map +1 -1
- package/dist/base-mira/input-otp.js.map +1 -1
- package/dist/base-mira/input.js.map +1 -1
- package/dist/base-mira/item.js.map +1 -1
- package/dist/base-mira/kbd.js.map +1 -1
- package/dist/base-mira/label.js.map +1 -1
- package/dist/base-mira/menubar.js.map +1 -1
- package/dist/base-mira/native-select.js.map +1 -1
- package/dist/base-mira/navigation-menu.js.map +1 -1
- package/dist/base-mira/pagination.js.map +1 -1
- package/dist/base-mira/popover.js.map +1 -1
- package/dist/base-mira/progress.js.map +1 -1
- package/dist/base-mira/radio-group.js.map +1 -1
- package/dist/base-mira/resizable.js.map +1 -1
- package/dist/base-mira/scroll-area.js.map +1 -1
- package/dist/base-mira/select.js.map +1 -1
- package/dist/base-mira/separator.js.map +1 -1
- package/dist/base-mira/sheet.js.map +1 -1
- package/dist/base-mira/sidebar.js +8 -6
- package/dist/base-mira/sidebar.js.map +1 -1
- package/dist/base-mira/skeleton.js.map +1 -1
- package/dist/base-mira/slider.js.map +1 -1
- package/dist/base-mira/spinner.js.map +1 -1
- package/dist/base-mira/switch.js.map +1 -1
- package/dist/base-mira/table.js.map +1 -1
- package/dist/base-mira/tabs.js.map +1 -1
- package/dist/base-mira/textarea.js.map +1 -1
- package/dist/base-mira/toggle-group.js.map +1 -1
- package/dist/base-mira/toggle.js.map +1 -1
- package/dist/base-mira/tooltip.js.map +1 -1
- package/dist/base-nova/accordion.js.map +1 -1
- package/dist/base-nova/alert-dialog.js.map +1 -1
- package/dist/base-nova/alert.js.map +1 -1
- package/dist/base-nova/aspect-ratio.js.map +1 -1
- package/dist/base-nova/avatar.js.map +1 -1
- package/dist/base-nova/badge.js.map +1 -1
- package/dist/base-nova/breadcrumb.js.map +1 -1
- package/dist/base-nova/button-group.js.map +1 -1
- package/dist/base-nova/button.js.map +1 -1
- package/dist/base-nova/calendar.js.map +1 -1
- package/dist/base-nova/card.js.map +1 -1
- package/dist/base-nova/carousel.js.map +1 -1
- package/dist/base-nova/chart.js.map +1 -1
- package/dist/base-nova/checkbox.js.map +1 -1
- package/dist/base-nova/combobox.js.map +1 -1
- package/dist/base-nova/command.js.map +1 -1
- package/dist/base-nova/context-menu.js.map +1 -1
- package/dist/base-nova/dialog.js.map +1 -1
- package/dist/base-nova/drawer.js.map +1 -1
- package/dist/base-nova/dropdown-menu.js.map +1 -1
- package/dist/base-nova/empty.js.map +1 -1
- package/dist/base-nova/field.js.map +1 -1
- package/dist/base-nova/hover-card.js.map +1 -1
- package/dist/base-nova/index.js +8 -6
- package/dist/base-nova/index.js.map +1 -1
- package/dist/base-nova/input-group.js.map +1 -1
- package/dist/base-nova/input-otp.js.map +1 -1
- package/dist/base-nova/input.js.map +1 -1
- package/dist/base-nova/item.js.map +1 -1
- package/dist/base-nova/kbd.js.map +1 -1
- package/dist/base-nova/label.js.map +1 -1
- package/dist/base-nova/menubar.js.map +1 -1
- package/dist/base-nova/native-select.js.map +1 -1
- package/dist/base-nova/navigation-menu.js.map +1 -1
- package/dist/base-nova/pagination.js.map +1 -1
- package/dist/base-nova/popover.js.map +1 -1
- package/dist/base-nova/progress.js.map +1 -1
- package/dist/base-nova/radio-group.js.map +1 -1
- package/dist/base-nova/resizable.js.map +1 -1
- package/dist/base-nova/scroll-area.js.map +1 -1
- package/dist/base-nova/select.js.map +1 -1
- package/dist/base-nova/separator.js.map +1 -1
- package/dist/base-nova/sheet.js.map +1 -1
- package/dist/base-nova/sidebar.js +8 -6
- package/dist/base-nova/sidebar.js.map +1 -1
- package/dist/base-nova/skeleton.js.map +1 -1
- package/dist/base-nova/slider.js.map +1 -1
- package/dist/base-nova/spinner.js.map +1 -1
- package/dist/base-nova/switch.js.map +1 -1
- package/dist/base-nova/table.js.map +1 -1
- package/dist/base-nova/tabs.js.map +1 -1
- package/dist/base-nova/textarea.js.map +1 -1
- package/dist/base-nova/toggle-group.js.map +1 -1
- package/dist/base-nova/toggle.js.map +1 -1
- package/dist/base-nova/tooltip.js.map +1 -1
- package/dist/base-vega/accordion.js.map +1 -1
- package/dist/base-vega/alert-dialog.js.map +1 -1
- package/dist/base-vega/alert.js.map +1 -1
- package/dist/base-vega/aspect-ratio.js.map +1 -1
- package/dist/base-vega/avatar.js.map +1 -1
- package/dist/base-vega/badge.js.map +1 -1
- package/dist/base-vega/breadcrumb.js.map +1 -1
- package/dist/base-vega/button-group.js.map +1 -1
- package/dist/base-vega/button.js.map +1 -1
- package/dist/base-vega/calendar.js.map +1 -1
- package/dist/base-vega/card.js.map +1 -1
- package/dist/base-vega/carousel.js.map +1 -1
- package/dist/base-vega/chart.js.map +1 -1
- package/dist/base-vega/checkbox.js.map +1 -1
- package/dist/base-vega/combobox.js.map +1 -1
- package/dist/base-vega/command.js.map +1 -1
- package/dist/base-vega/context-menu.js.map +1 -1
- package/dist/base-vega/dialog.js.map +1 -1
- package/dist/base-vega/drawer.js.map +1 -1
- package/dist/base-vega/dropdown-menu.js.map +1 -1
- package/dist/base-vega/empty.js.map +1 -1
- package/dist/base-vega/field.js.map +1 -1
- package/dist/base-vega/hover-card.js.map +1 -1
- package/dist/base-vega/index.js +8 -6
- package/dist/base-vega/index.js.map +1 -1
- package/dist/base-vega/input-group.js.map +1 -1
- package/dist/base-vega/input-otp.js.map +1 -1
- package/dist/base-vega/input.js.map +1 -1
- package/dist/base-vega/item.js.map +1 -1
- package/dist/base-vega/kbd.js.map +1 -1
- package/dist/base-vega/label.js.map +1 -1
- package/dist/base-vega/menubar.js.map +1 -1
- package/dist/base-vega/native-select.js.map +1 -1
- package/dist/base-vega/navigation-menu.js.map +1 -1
- package/dist/base-vega/pagination.js.map +1 -1
- package/dist/base-vega/popover.js.map +1 -1
- package/dist/base-vega/progress.js.map +1 -1
- package/dist/base-vega/radio-group.js.map +1 -1
- package/dist/base-vega/resizable.js.map +1 -1
- package/dist/base-vega/scroll-area.js.map +1 -1
- package/dist/base-vega/select.js.map +1 -1
- package/dist/base-vega/separator.js.map +1 -1
- package/dist/base-vega/sheet.js.map +1 -1
- package/dist/base-vega/sidebar.js +8 -6
- package/dist/base-vega/sidebar.js.map +1 -1
- package/dist/base-vega/skeleton.js.map +1 -1
- package/dist/base-vega/slider.js.map +1 -1
- package/dist/base-vega/spinner.js.map +1 -1
- package/dist/base-vega/switch.js.map +1 -1
- package/dist/base-vega/table.js.map +1 -1
- package/dist/base-vega/tabs.js.map +1 -1
- package/dist/base-vega/textarea.js.map +1 -1
- package/dist/base-vega/toggle-group.js.map +1 -1
- package/dist/base-vega/toggle.js.map +1 -1
- package/dist/base-vega/tooltip.js.map +1 -1
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.js +181 -10
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-as-ref.d.ts +5 -0
- package/dist/hooks/use-as-ref.js +17 -0
- package/dist/hooks/use-as-ref.js.map +1 -0
- package/dist/hooks/use-badge-overflow.d.ts +24 -0
- package/dist/hooks/use-badge-overflow.js +130 -0
- package/dist/hooks/use-badge-overflow.js.map +1 -0
- package/dist/hooks/use-callback-ref.d.ts +10 -0
- package/dist/hooks/use-callback-ref.js +17 -0
- package/dist/hooks/use-callback-ref.js.map +1 -0
- package/dist/hooks/use-debounced-callback.d.ts +3 -0
- package/dist/hooks/use-debounced-callback.js +38 -0
- package/dist/hooks/use-debounced-callback.js.map +1 -0
- package/dist/hooks/use-file-upload.d.ts +48 -0
- package/dist/hooks/use-file-upload.js +279 -0
- package/dist/hooks/use-file-upload.js.map +1 -0
- package/dist/hooks/use-isomorphic-layout-effect.d.ts +5 -0
- package/dist/hooks/use-isomorphic-layout-effect.js +8 -0
- package/dist/hooks/use-isomorphic-layout-effect.js.map +1 -0
- package/dist/hooks/use-lazy-ref.d.ts +5 -0
- package/dist/hooks/use-lazy-ref.js +14 -0
- package/dist/hooks/use-lazy-ref.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +1 -1
- package/dist/hooks/use-mobile.js +8 -6
- package/dist/hooks/use-mobile.js.map +1 -1
- package/dist/index.d.ts +1622 -106
- package/dist/index.js +23260 -2932
- package/dist/index.js.map +1 -1
- package/dist/lib/compose-refs.d.ts +15 -0
- package/dist/lib/compose-refs.js +42 -0
- package/dist/lib/compose-refs.js.map +1 -0
- package/dist/lib/format.d.ts +3 -0
- package/dist/lib/format.js +18 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/index.js +53 -2
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/utils.d.ts +6 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/new-york/accordion.js.map +1 -1
- package/dist/new-york/alert-dialog.js.map +1 -1
- package/dist/new-york/alert.js.map +1 -1
- package/dist/new-york/avatar.js.map +1 -1
- package/dist/new-york/badge.js.map +1 -1
- package/dist/new-york/breadcrumb.js.map +1 -1
- package/dist/new-york/button-group.js.map +1 -1
- package/dist/new-york/button.js.map +1 -1
- package/dist/new-york/calendar.js.map +1 -1
- package/dist/new-york/card.js.map +1 -1
- package/dist/new-york/carousel.js.map +1 -1
- package/dist/new-york/chart.js.map +1 -1
- package/dist/new-york/checkbox.js.map +1 -1
- package/dist/new-york/combobox.js.map +1 -1
- package/dist/new-york/command.js.map +1 -1
- package/dist/new-york/context-menu.js.map +1 -1
- package/dist/new-york/dialog.js.map +1 -1
- package/dist/new-york/drawer.js.map +1 -1
- package/dist/new-york/dropdown-menu.js.map +1 -1
- package/dist/new-york/empty.js.map +1 -1
- package/dist/new-york/field.js.map +1 -1
- package/dist/new-york/form.js.map +1 -1
- package/dist/new-york/hover-card.js.map +1 -1
- package/dist/new-york/index.js +8 -6
- package/dist/new-york/index.js.map +1 -1
- package/dist/new-york/input-group.js.map +1 -1
- package/dist/new-york/input-otp.js.map +1 -1
- package/dist/new-york/input.js.map +1 -1
- package/dist/new-york/item.js.map +1 -1
- package/dist/new-york/kbd.js.map +1 -1
- package/dist/new-york/label.js.map +1 -1
- package/dist/new-york/menubar.js.map +1 -1
- package/dist/new-york/native-select.js.map +1 -1
- package/dist/new-york/navigation-menu.js.map +1 -1
- package/dist/new-york/pagination.js.map +1 -1
- package/dist/new-york/popover.js.map +1 -1
- package/dist/new-york/progress.js.map +1 -1
- package/dist/new-york/radio-group.js.map +1 -1
- package/dist/new-york/resizable.js.map +1 -1
- package/dist/new-york/scroll-area.js.map +1 -1
- package/dist/new-york/select.js.map +1 -1
- package/dist/new-york/separator.js.map +1 -1
- package/dist/new-york/sheet.js.map +1 -1
- package/dist/new-york/sidebar.js +8 -6
- package/dist/new-york/sidebar.js.map +1 -1
- package/dist/new-york/skeleton.js.map +1 -1
- package/dist/new-york/slider.js.map +1 -1
- package/dist/new-york/spinner.js.map +1 -1
- package/dist/new-york/switch.js.map +1 -1
- package/dist/new-york/table.js.map +1 -1
- package/dist/new-york/tabs.js.map +1 -1
- package/dist/new-york/textarea.js.map +1 -1
- package/dist/new-york/toggle-group.js.map +1 -1
- package/dist/new-york/toggle.js.map +1 -1
- package/dist/new-york/tooltip.js.map +1 -1
- package/dist/radix-lyra/accordion.js.map +1 -1
- package/dist/radix-lyra/alert-dialog.js.map +1 -1
- package/dist/radix-lyra/alert.js.map +1 -1
- package/dist/radix-lyra/avatar.js.map +1 -1
- package/dist/radix-lyra/badge.js.map +1 -1
- package/dist/radix-lyra/breadcrumb.js.map +1 -1
- package/dist/radix-lyra/button-group.js.map +1 -1
- package/dist/radix-lyra/button.js.map +1 -1
- package/dist/radix-lyra/calendar.js.map +1 -1
- package/dist/radix-lyra/card.js.map +1 -1
- package/dist/radix-lyra/carousel.js.map +1 -1
- package/dist/radix-lyra/chart.js.map +1 -1
- package/dist/radix-lyra/checkbox.js.map +1 -1
- package/dist/radix-lyra/combobox.js.map +1 -1
- package/dist/radix-lyra/command.js.map +1 -1
- package/dist/radix-lyra/context-menu.js.map +1 -1
- package/dist/radix-lyra/dialog.js.map +1 -1
- package/dist/radix-lyra/drawer.js.map +1 -1
- package/dist/radix-lyra/dropdown-menu.js.map +1 -1
- package/dist/radix-lyra/empty.js.map +1 -1
- package/dist/radix-lyra/field.js.map +1 -1
- package/dist/radix-lyra/hover-card.js.map +1 -1
- package/dist/radix-lyra/index.js +8 -6
- package/dist/radix-lyra/index.js.map +1 -1
- package/dist/radix-lyra/input-group.js.map +1 -1
- package/dist/radix-lyra/input-otp.js.map +1 -1
- package/dist/radix-lyra/input.js.map +1 -1
- package/dist/radix-lyra/item.js.map +1 -1
- package/dist/radix-lyra/kbd.js.map +1 -1
- package/dist/radix-lyra/label.js.map +1 -1
- package/dist/radix-lyra/menubar.js.map +1 -1
- package/dist/radix-lyra/native-select.js.map +1 -1
- package/dist/radix-lyra/navigation-menu.js.map +1 -1
- package/dist/radix-lyra/pagination.js.map +1 -1
- package/dist/radix-lyra/popover.js.map +1 -1
- package/dist/radix-lyra/progress.js.map +1 -1
- package/dist/radix-lyra/radio-group.js.map +1 -1
- package/dist/radix-lyra/resizable.js.map +1 -1
- package/dist/radix-lyra/scroll-area.js.map +1 -1
- package/dist/radix-lyra/select.js.map +1 -1
- package/dist/radix-lyra/separator.js.map +1 -1
- package/dist/radix-lyra/sheet.js.map +1 -1
- package/dist/radix-lyra/sidebar.js +8 -6
- package/dist/radix-lyra/sidebar.js.map +1 -1
- package/dist/radix-lyra/skeleton.js.map +1 -1
- package/dist/radix-lyra/slider.js.map +1 -1
- package/dist/radix-lyra/spinner.js.map +1 -1
- package/dist/radix-lyra/switch.js.map +1 -1
- package/dist/radix-lyra/table.js.map +1 -1
- package/dist/radix-lyra/tabs.js.map +1 -1
- package/dist/radix-lyra/textarea.js.map +1 -1
- package/dist/radix-lyra/toggle-group.js.map +1 -1
- package/dist/radix-lyra/toggle.js.map +1 -1
- package/dist/radix-lyra/tooltip.js.map +1 -1
- package/dist/radix-maia/accordion.js.map +1 -1
- package/dist/radix-maia/alert-dialog.js.map +1 -1
- package/dist/radix-maia/alert.js.map +1 -1
- package/dist/radix-maia/avatar.js.map +1 -1
- package/dist/radix-maia/badge.js.map +1 -1
- package/dist/radix-maia/breadcrumb.js.map +1 -1
- package/dist/radix-maia/button-group.js.map +1 -1
- package/dist/radix-maia/button.js.map +1 -1
- package/dist/radix-maia/calendar.js.map +1 -1
- package/dist/radix-maia/card.js.map +1 -1
- package/dist/radix-maia/carousel.js.map +1 -1
- package/dist/radix-maia/chart.js.map +1 -1
- package/dist/radix-maia/checkbox.js.map +1 -1
- package/dist/radix-maia/combobox.js.map +1 -1
- package/dist/radix-maia/command.js.map +1 -1
- package/dist/radix-maia/context-menu.js.map +1 -1
- package/dist/radix-maia/dialog.js.map +1 -1
- package/dist/radix-maia/drawer.js.map +1 -1
- package/dist/radix-maia/dropdown-menu.js.map +1 -1
- package/dist/radix-maia/empty.js.map +1 -1
- package/dist/radix-maia/field.js.map +1 -1
- package/dist/radix-maia/hover-card.js.map +1 -1
- package/dist/radix-maia/index.js +8 -6
- package/dist/radix-maia/index.js.map +1 -1
- package/dist/radix-maia/input-group.js.map +1 -1
- package/dist/radix-maia/input-otp.js.map +1 -1
- package/dist/radix-maia/input.js.map +1 -1
- package/dist/radix-maia/item.js.map +1 -1
- package/dist/radix-maia/kbd.js.map +1 -1
- package/dist/radix-maia/label.js.map +1 -1
- package/dist/radix-maia/menubar.js.map +1 -1
- package/dist/radix-maia/native-select.js.map +1 -1
- package/dist/radix-maia/navigation-menu.js.map +1 -1
- package/dist/radix-maia/pagination.js.map +1 -1
- package/dist/radix-maia/popover.js.map +1 -1
- package/dist/radix-maia/progress.js.map +1 -1
- package/dist/radix-maia/radio-group.js.map +1 -1
- package/dist/radix-maia/resizable.js.map +1 -1
- package/dist/radix-maia/scroll-area.js.map +1 -1
- package/dist/radix-maia/select.js.map +1 -1
- package/dist/radix-maia/separator.js.map +1 -1
- package/dist/radix-maia/sheet.js.map +1 -1
- package/dist/radix-maia/sidebar.js +8 -6
- package/dist/radix-maia/sidebar.js.map +1 -1
- package/dist/radix-maia/skeleton.js.map +1 -1
- package/dist/radix-maia/slider.js.map +1 -1
- package/dist/radix-maia/spinner.js.map +1 -1
- package/dist/radix-maia/switch.js.map +1 -1
- package/dist/radix-maia/table.js.map +1 -1
- package/dist/radix-maia/tabs.js.map +1 -1
- package/dist/radix-maia/textarea.js.map +1 -1
- package/dist/radix-maia/toggle-group.js.map +1 -1
- package/dist/radix-maia/toggle.js.map +1 -1
- package/dist/radix-maia/tooltip.js.map +1 -1
- package/dist/radix-mira/accordion.js.map +1 -1
- package/dist/radix-mira/alert-dialog.js.map +1 -1
- package/dist/radix-mira/alert.js.map +1 -1
- package/dist/radix-mira/avatar.js.map +1 -1
- package/dist/radix-mira/badge.js.map +1 -1
- package/dist/radix-mira/breadcrumb.js.map +1 -1
- package/dist/radix-mira/button-group.js.map +1 -1
- package/dist/radix-mira/button.js.map +1 -1
- package/dist/radix-mira/calendar.js.map +1 -1
- package/dist/radix-mira/card.js.map +1 -1
- package/dist/radix-mira/carousel.js.map +1 -1
- package/dist/radix-mira/chart.js.map +1 -1
- package/dist/radix-mira/checkbox.js.map +1 -1
- package/dist/radix-mira/combobox.js.map +1 -1
- package/dist/radix-mira/command.js.map +1 -1
- package/dist/radix-mira/context-menu.js.map +1 -1
- package/dist/radix-mira/dialog.js.map +1 -1
- package/dist/radix-mira/drawer.js.map +1 -1
- package/dist/radix-mira/dropdown-menu.js.map +1 -1
- package/dist/radix-mira/empty.js.map +1 -1
- package/dist/radix-mira/field.js.map +1 -1
- package/dist/radix-mira/hover-card.js.map +1 -1
- package/dist/radix-mira/index.js +8 -6
- package/dist/radix-mira/index.js.map +1 -1
- package/dist/radix-mira/input-group.js.map +1 -1
- package/dist/radix-mira/input-otp.js.map +1 -1
- package/dist/radix-mira/input.js.map +1 -1
- package/dist/radix-mira/item.js.map +1 -1
- package/dist/radix-mira/kbd.js.map +1 -1
- package/dist/radix-mira/label.js.map +1 -1
- package/dist/radix-mira/menubar.js.map +1 -1
- package/dist/radix-mira/native-select.js.map +1 -1
- package/dist/radix-mira/navigation-menu.js.map +1 -1
- package/dist/radix-mira/pagination.js.map +1 -1
- package/dist/radix-mira/popover.js.map +1 -1
- package/dist/radix-mira/progress.js.map +1 -1
- package/dist/radix-mira/radio-group.js.map +1 -1
- package/dist/radix-mira/resizable.js.map +1 -1
- package/dist/radix-mira/scroll-area.js.map +1 -1
- package/dist/radix-mira/select.js.map +1 -1
- package/dist/radix-mira/separator.js.map +1 -1
- package/dist/radix-mira/sheet.js.map +1 -1
- package/dist/radix-mira/sidebar.js +8 -6
- package/dist/radix-mira/sidebar.js.map +1 -1
- package/dist/radix-mira/skeleton.js.map +1 -1
- package/dist/radix-mira/slider.js.map +1 -1
- package/dist/radix-mira/spinner.js.map +1 -1
- package/dist/radix-mira/switch.js.map +1 -1
- package/dist/radix-mira/table.js.map +1 -1
- package/dist/radix-mira/tabs.js.map +1 -1
- package/dist/radix-mira/textarea.js.map +1 -1
- package/dist/radix-mira/toggle-group.js.map +1 -1
- package/dist/radix-mira/toggle.js.map +1 -1
- package/dist/radix-mira/tooltip.js.map +1 -1
- package/dist/radix-nova/accordion.js.map +1 -1
- package/dist/radix-nova/alert-dialog.js.map +1 -1
- package/dist/radix-nova/alert.js.map +1 -1
- package/dist/radix-nova/avatar.js.map +1 -1
- package/dist/radix-nova/badge.js.map +1 -1
- package/dist/radix-nova/breadcrumb.js.map +1 -1
- package/dist/radix-nova/button-group.js.map +1 -1
- package/dist/radix-nova/button.js.map +1 -1
- package/dist/radix-nova/calendar.js.map +1 -1
- package/dist/radix-nova/card.js.map +1 -1
- package/dist/radix-nova/carousel.js.map +1 -1
- package/dist/radix-nova/chart.js.map +1 -1
- package/dist/radix-nova/checkbox.js.map +1 -1
- package/dist/radix-nova/combobox.js.map +1 -1
- package/dist/radix-nova/command.js.map +1 -1
- package/dist/radix-nova/context-menu.js.map +1 -1
- package/dist/radix-nova/dialog.js.map +1 -1
- package/dist/radix-nova/drawer.js.map +1 -1
- package/dist/radix-nova/dropdown-menu.js.map +1 -1
- package/dist/radix-nova/empty.js.map +1 -1
- package/dist/radix-nova/field.js.map +1 -1
- package/dist/radix-nova/hover-card.js.map +1 -1
- package/dist/radix-nova/index.js +8 -6
- package/dist/radix-nova/index.js.map +1 -1
- package/dist/radix-nova/input-group.js.map +1 -1
- package/dist/radix-nova/input-otp.js.map +1 -1
- package/dist/radix-nova/input.js.map +1 -1
- package/dist/radix-nova/item.js.map +1 -1
- package/dist/radix-nova/kbd.js.map +1 -1
- package/dist/radix-nova/label.js.map +1 -1
- package/dist/radix-nova/menubar.js.map +1 -1
- package/dist/radix-nova/native-select.js.map +1 -1
- package/dist/radix-nova/navigation-menu.js.map +1 -1
- package/dist/radix-nova/pagination.js.map +1 -1
- package/dist/radix-nova/popover.js.map +1 -1
- package/dist/radix-nova/progress.js.map +1 -1
- package/dist/radix-nova/radio-group.js.map +1 -1
- package/dist/radix-nova/resizable.js.map +1 -1
- package/dist/radix-nova/scroll-area.js.map +1 -1
- package/dist/radix-nova/select.js.map +1 -1
- package/dist/radix-nova/separator.js.map +1 -1
- package/dist/radix-nova/sheet.js.map +1 -1
- package/dist/radix-nova/sidebar.js +8 -6
- package/dist/radix-nova/sidebar.js.map +1 -1
- package/dist/radix-nova/skeleton.js.map +1 -1
- package/dist/radix-nova/slider.js.map +1 -1
- package/dist/radix-nova/spinner.js.map +1 -1
- package/dist/radix-nova/switch.js.map +1 -1
- package/dist/radix-nova/table.js.map +1 -1
- package/dist/radix-nova/tabs.js.map +1 -1
- package/dist/radix-nova/textarea.js.map +1 -1
- package/dist/radix-nova/toggle-group.js.map +1 -1
- package/dist/radix-nova/toggle.js.map +1 -1
- package/dist/radix-nova/tooltip.js.map +1 -1
- package/dist/radix-vega/accordion.js.map +1 -1
- package/dist/radix-vega/action-bar.d.ts +41 -0
- package/dist/radix-vega/action-bar.js +589 -0
- package/dist/radix-vega/action-bar.js.map +1 -0
- package/dist/radix-vega/alert-dialog.js.map +1 -1
- package/dist/radix-vega/alert.js.map +1 -1
- package/dist/radix-vega/avatar-group.d.ts +19 -0
- package/dist/radix-vega/avatar-group.js +193 -0
- package/dist/radix-vega/avatar-group.js.map +1 -0
- package/dist/radix-vega/avatar.d.ts +1 -3
- package/dist/radix-vega/avatar.js +1 -27
- package/dist/radix-vega/avatar.js.map +1 -1
- package/dist/radix-vega/badge-overflow.d.ts +21 -0
- package/dist/radix-vega/badge-overflow.js +223 -0
- package/dist/radix-vega/badge-overflow.js.map +1 -0
- package/dist/radix-vega/badge.d.ts +1 -1
- package/dist/radix-vega/badge.js.map +1 -1
- package/dist/radix-vega/breadcrumb.js.map +1 -1
- package/dist/radix-vega/button-group.js.map +1 -1
- package/dist/radix-vega/button.d.ts +2 -2
- package/dist/radix-vega/button.js.map +1 -1
- package/dist/radix-vega/calendar.js.map +1 -1
- package/dist/radix-vega/card.js.map +1 -1
- package/dist/radix-vega/carousel.js.map +1 -1
- package/dist/radix-vega/chart.js.map +1 -1
- package/dist/radix-vega/checkbox-group.d.ts +12 -0
- package/dist/radix-vega/checkbox-group.js +119 -0
- package/dist/radix-vega/checkbox-group.js.map +1 -0
- package/dist/radix-vega/checkbox.js.map +1 -1
- package/dist/radix-vega/circular-progress.d.ts +27 -0
- package/dist/radix-vega/circular-progress.js +252 -0
- package/dist/radix-vega/circular-progress.js.map +1 -0
- package/dist/radix-vega/color-picker.d.ts +85 -0
- package/dist/radix-vega/color-picker.js +1683 -0
- package/dist/radix-vega/color-picker.js.map +1 -0
- package/dist/radix-vega/color-swatch.d.ts +17 -0
- package/dist/radix-vega/color-swatch.js +95 -0
- package/dist/radix-vega/color-swatch.js.map +1 -0
- package/dist/radix-vega/combobox.d.ts +18 -22
- package/dist/radix-vega/combobox.js +118 -276
- package/dist/radix-vega/combobox.js.map +1 -1
- package/dist/radix-vega/command.js.map +1 -1
- package/dist/radix-vega/compare-slider.d.ts +32 -0
- package/dist/radix-vega/compare-slider.js +393 -0
- package/dist/radix-vega/compare-slider.js.map +1 -0
- package/dist/radix-vega/context-menu.js.map +1 -1
- package/dist/radix-vega/cropper.d.ts +89 -0
- package/dist/radix-vega/cropper.js +1396 -0
- package/dist/radix-vega/cropper.js.map +1 -0
- package/dist/radix-vega/dialog.js.map +1 -1
- package/dist/radix-vega/drawer.js.map +1 -1
- package/dist/radix-vega/dropdown-menu.js.map +1 -1
- package/dist/radix-vega/editable.d.ts +100 -0
- package/dist/radix-vega/editable.js +684 -0
- package/dist/radix-vega/editable.js.map +1 -0
- package/dist/radix-vega/empty.js.map +1 -1
- package/dist/radix-vega/field.js.map +1 -1
- package/dist/radix-vega/file-upload.d.ts +89 -0
- package/dist/radix-vega/file-upload.js +1089 -0
- package/dist/radix-vega/file-upload.js.map +1 -0
- package/dist/radix-vega/gauge.d.ts +27 -0
- package/dist/radix-vega/gauge.js +359 -0
- package/dist/radix-vega/gauge.js.map +1 -0
- package/dist/radix-vega/hover-card.js.map +1 -1
- package/dist/radix-vega/index.d.ts +50 -3
- package/dist/radix-vega/index.js +23001 -2667
- package/dist/radix-vega/index.js.map +1 -1
- package/dist/radix-vega/input-group.d.ts +1 -1
- package/dist/radix-vega/input-group.js.map +1 -1
- package/dist/radix-vega/input-otp.js.map +1 -1
- package/dist/radix-vega/input.js.map +1 -1
- package/dist/radix-vega/item.d.ts +2 -2
- package/dist/radix-vega/item.js.map +1 -1
- package/dist/radix-vega/kanban.d.ts +62 -0
- package/dist/radix-vega/kanban.js +831 -0
- package/dist/radix-vega/kanban.js.map +1 -0
- package/dist/radix-vega/kbd.js.map +1 -1
- package/dist/radix-vega/key-value.d.ts +82 -0
- package/dist/radix-vega/key-value.js +765 -0
- package/dist/radix-vega/key-value.js.map +1 -0
- package/dist/radix-vega/label.js.map +1 -1
- package/dist/radix-vega/listbox.d.ts +11 -0
- package/dist/radix-vega/listbox.js +90 -0
- package/dist/radix-vega/listbox.js.map +1 -0
- package/dist/radix-vega/mask-input.d.ts +64 -0
- package/dist/radix-vega/mask-input.js +1186 -0
- package/dist/radix-vega/mask-input.js.map +1 -0
- package/dist/radix-vega/media-player.d.ts +127 -0
- package/dist/radix-vega/media-player.js +2696 -0
- package/dist/radix-vega/media-player.js.map +1 -0
- package/dist/radix-vega/mention.d.ts +11 -0
- package/dist/radix-vega/mention.js +94 -0
- package/dist/radix-vega/mention.js.map +1 -0
- package/dist/radix-vega/menubar.js.map +1 -1
- package/dist/radix-vega/native-select.js.map +1 -1
- package/dist/radix-vega/navigation-menu.js.map +1 -1
- package/dist/radix-vega/pagination.js.map +1 -1
- package/dist/radix-vega/phone-input.d.ts +48 -0
- package/dist/radix-vega/phone-input.js +957 -0
- package/dist/radix-vega/phone-input.js.map +1 -0
- package/dist/radix-vega/popover.js.map +1 -1
- package/dist/radix-vega/progress.js.map +1 -1
- package/dist/radix-vega/qr-code.d.ts +53 -0
- package/dist/radix-vega/qr-code.js +396 -0
- package/dist/radix-vega/qr-code.js.map +1 -0
- package/dist/radix-vega/radio-group.js.map +1 -1
- package/dist/radix-vega/rating.d.ts +47 -0
- package/dist/radix-vega/rating.js +749 -0
- package/dist/radix-vega/rating.js.map +1 -0
- package/dist/radix-vega/relative-time-card.d.ts +22 -0
- package/dist/radix-vega/relative-time-card.js +236 -0
- package/dist/radix-vega/relative-time-card.js.map +1 -0
- package/dist/radix-vega/resizable.js.map +1 -1
- package/dist/radix-vega/responsive-dialog.d.ts +20 -0
- package/dist/radix-vega/responsive-dialog.js +483 -0
- package/dist/radix-vega/responsive-dialog.js.map +1 -0
- package/dist/radix-vega/scroll-area.js.map +1 -1
- package/dist/radix-vega/scroll-spy.d.ts +39 -0
- package/dist/radix-vega/scroll-spy.js +372 -0
- package/dist/radix-vega/scroll-spy.js.map +1 -0
- package/dist/radix-vega/scroller.d.ts +20 -0
- package/dist/radix-vega/scroller.js +352 -0
- package/dist/radix-vega/scroller.js.map +1 -0
- package/dist/radix-vega/segmented-input.d.ts +29 -0
- package/dist/radix-vega/segmented-input.js +178 -0
- package/dist/radix-vega/segmented-input.js.map +1 -0
- package/dist/radix-vega/select.js.map +1 -1
- package/dist/radix-vega/separator.js.map +1 -1
- package/dist/radix-vega/sheet.js.map +1 -1
- package/dist/radix-vega/sidebar.js +8 -6
- package/dist/radix-vega/sidebar.js.map +1 -1
- package/dist/radix-vega/skeleton.js.map +1 -1
- package/dist/radix-vega/slider.js.map +1 -1
- package/dist/radix-vega/sortable.d.ts +51 -0
- package/dist/radix-vega/sortable.js +444 -0
- package/dist/radix-vega/sortable.js.map +1 -0
- package/dist/radix-vega/speed-dial.d.ts +46 -0
- package/dist/radix-vega/speed-dial.js +898 -0
- package/dist/radix-vega/speed-dial.js.map +1 -0
- package/dist/radix-vega/spinner.js.map +1 -1
- package/dist/radix-vega/stack.d.ts +21 -0
- package/dist/radix-vega/stack.js +268 -0
- package/dist/radix-vega/stack.js.map +1 -0
- package/dist/radix-vega/stat.d.ts +24 -0
- package/dist/radix-vega/stat.js +147 -0
- package/dist/radix-vega/stat.js.map +1 -0
- package/dist/radix-vega/status.d.ts +18 -0
- package/dist/radix-vega/status.js +71 -0
- package/dist/radix-vega/status.js.map +1 -0
- package/dist/radix-vega/stepper.d.ts +73 -0
- package/dist/radix-vega/stepper.js +973 -0
- package/dist/radix-vega/stepper.js.map +1 -0
- package/dist/radix-vega/swap.d.ts +29 -0
- package/dist/radix-vega/swap.js +214 -0
- package/dist/radix-vega/swap.js.map +1 -0
- package/dist/radix-vega/switch.js.map +1 -1
- package/dist/radix-vega/table.js.map +1 -1
- package/dist/radix-vega/tabs.d.ts +1 -1
- package/dist/radix-vega/tabs.js.map +1 -1
- package/dist/radix-vega/tags-input.d.ts +12 -0
- package/dist/radix-vega/tags-input.js +98 -0
- package/dist/radix-vega/tags-input.js.map +1 -0
- package/dist/radix-vega/textarea.js.map +1 -1
- package/dist/radix-vega/time-picker.d.ts +88 -0
- package/dist/radix-vega/time-picker.js +1750 -0
- package/dist/radix-vega/time-picker.js.map +1 -0
- package/dist/radix-vega/timeline.d.ts +32 -0
- package/dist/radix-vega/timeline.js +611 -0
- package/dist/radix-vega/timeline.js.map +1 -0
- package/dist/radix-vega/toggle-group.js.map +1 -1
- package/dist/radix-vega/toggle.js.map +1 -1
- package/dist/radix-vega/tooltip.js.map +1 -1
- package/dist/radix-vega/tour.d.ts +109 -0
- package/dist/radix-vega/tour.js +1314 -0
- package/dist/radix-vega/tour.js.map +1 -0
- package/dist/radix-vega/visually-hidden-input.d.ts +8 -0
- package/dist/radix-vega/visually-hidden-input.js +33 -0
- package/dist/radix-vega/visually-hidden-input.js.map +1 -0
- package/package.json +53 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/hooks/use-isomorphic-layout-effect.ts","../../src/hooks/use-as-ref.ts","../../src/hooks/use-lazy-ref.ts","../../src/radix-vega/file-upload.tsx"],"names":["React","React2","React3","state","files","invalid","rejectedFiles"],"mappings":"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","file":"file-upload.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merges Tailwind class names, resolving any conflicts.\n *\n * @param inputs - An array of class names to merge.\n * @returns A string of merged and optimized class names.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\n\nconst useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n\nexport { useIsomorphicLayoutEffect };\n","import * as React from \"react\";\n\nimport { useIsomorphicLayoutEffect } from \"@/hooks/use-isomorphic-layout-effect\";\n\nfunction useAsRef<T>(props: T) {\n const ref = React.useRef<T>(props);\n\n useIsomorphicLayoutEffect(() => {\n ref.current = props;\n });\n\n return ref;\n}\n\nexport { useAsRef };\n","import * as React from \"react\";\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T | null>(null);\n\n if (ref.current === null) {\n ref.current = fn();\n }\n\n return ref as React.RefObject<T>;\n}\n\nexport { useLazyRef };\n","\"use client\";\n\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n FileArchiveIcon,\n FileAudioIcon,\n FileCodeIcon,\n FileCogIcon,\n FileIcon,\n FileTextIcon,\n FileVideoIcon,\n} from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useAsRef } from \"@/hooks/use-as-ref\";\nimport { useLazyRef } from \"@/hooks/use-lazy-ref\";\n\nconst ROOT_NAME = \"FileUpload\";\nconst DROPZONE_NAME = \"FileUploadDropzone\";\nconst TRIGGER_NAME = \"FileUploadTrigger\";\nconst LIST_NAME = \"FileUploadList\";\nconst ITEM_NAME = \"FileUploadItem\";\nconst ITEM_PREVIEW_NAME = \"FileUploadItemPreview\";\nconst ITEM_METADATA_NAME = \"FileUploadItemMetadata\";\nconst ITEM_PROGRESS_NAME = \"FileUploadItemProgress\";\nconst ITEM_DELETE_NAME = \"FileUploadItemDelete\";\nconst CLEAR_NAME = \"FileUploadClear\";\n\nfunction formatBytes(bytes: number) {\n if (bytes === 0) return \"0 B\";\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n return `${(bytes / 1024 ** i).toFixed(i ? 1 : 0)} ${sizes[i]}`;\n}\n\nfunction getFileIcon(file: File) {\n const type = file.type;\n const extension = file.name.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n if (type.startsWith(\"video/\")) {\n return <FileVideoIcon />;\n }\n\n if (type.startsWith(\"audio/\")) {\n return <FileAudioIcon />;\n }\n\n if (\n type.startsWith(\"text/\") ||\n [\"txt\", \"md\", \"rtf\", \"pdf\"].includes(extension)\n ) {\n return <FileTextIcon />;\n }\n\n if (\n [\n \"html\",\n \"css\",\n \"js\",\n \"jsx\",\n \"ts\",\n \"tsx\",\n \"json\",\n \"xml\",\n \"php\",\n \"py\",\n \"rb\",\n \"java\",\n \"c\",\n \"cpp\",\n \"cs\",\n ].includes(extension)\n ) {\n return <FileCodeIcon />;\n }\n\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\", \"bz2\"].includes(extension)) {\n return <FileArchiveIcon />;\n }\n\n if (\n [\"exe\", \"msi\", \"app\", \"apk\", \"deb\", \"rpm\"].includes(extension) ||\n type.startsWith(\"application/\")\n ) {\n return <FileCogIcon />;\n }\n\n return <FileIcon />;\n}\n\ntype Direction = \"ltr\" | \"rtl\";\n\ninterface FileState {\n file: File;\n progress: number;\n error?: string;\n status: \"idle\" | \"uploading\" | \"error\" | \"success\";\n}\n\ninterface StoreState {\n files: Map<File, FileState>;\n dragOver: boolean;\n invalid: boolean;\n}\n\ntype StoreAction =\n | { type: \"ADD_FILES\"; files: File[] }\n | { type: \"SET_FILES\"; files: File[] }\n | { type: \"SET_PROGRESS\"; file: File; progress: number }\n | { type: \"SET_SUCCESS\"; file: File }\n | { type: \"SET_ERROR\"; file: File; error: string }\n | { type: \"REMOVE_FILE\"; file: File }\n | { type: \"SET_DRAG_OVER\"; dragOver: boolean }\n | { type: \"SET_INVALID\"; invalid: boolean }\n | { type: \"CLEAR\" };\n\ntype Store = {\n getState: () => StoreState;\n dispatch: (action: StoreAction) => void;\n subscribe: (listener: () => void) => () => void;\n};\n\nconst StoreContext = React.createContext<Store | null>(null);\n\nfunction useStoreContext(consumerName: string) {\n const context = React.useContext(StoreContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\nfunction useStore<T>(selector: (state: StoreState) => T): T {\n const store = useStoreContext(\"useStore\");\n\n const lastValueRef = useLazyRef<{ value: T; state: StoreState } | null>(\n () => null,\n );\n\n const getSnapshot = React.useCallback(() => {\n const state = store.getState();\n const prevValue = lastValueRef.current;\n\n if (prevValue && prevValue.state === state) {\n return prevValue.value;\n }\n\n const nextValue = selector(state);\n lastValueRef.current = { value: nextValue, state };\n return nextValue;\n }, [store, selector, lastValueRef]);\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\ninterface FileUploadContextValue {\n inputId: string;\n dropzoneId: string;\n listId: string;\n labelId: string;\n disabled: boolean;\n dir: Direction;\n inputRef: React.RefObject<HTMLInputElement | null>;\n urlCache: WeakMap<File, string>;\n}\n\nconst FileUploadContext = React.createContext<FileUploadContextValue | null>(\n null,\n);\n\nfunction useFileUploadContext(consumerName: string) {\n const context = React.useContext(FileUploadContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface FileUploadProps\n extends Omit<React.ComponentProps<\"div\">, \"defaultValue\" | \"onChange\"> {\n value?: File[];\n defaultValue?: File[];\n onValueChange?: (files: File[]) => void;\n onAccept?: (files: File[]) => void;\n onFileAccept?: (file: File) => void;\n onFileReject?: (file: File, message: string) => void;\n onFileValidate?: (file: File) => string | null | undefined;\n onUpload?: (\n files: File[],\n options: {\n onProgress: (file: File, progress: number) => void;\n onSuccess: (file: File) => void;\n onError: (file: File, error: Error) => void;\n },\n ) => Promise<void> | void;\n accept?: string;\n maxFiles?: number;\n maxSize?: number;\n dir?: Direction;\n label?: string;\n name?: string;\n asChild?: boolean;\n disabled?: boolean;\n invalid?: boolean;\n multiple?: boolean;\n required?: boolean;\n}\n\nfunction FileUpload(props: FileUploadProps) {\n const {\n value,\n defaultValue,\n onValueChange,\n onAccept,\n onFileAccept,\n onFileReject,\n onFileValidate,\n onUpload,\n accept,\n maxFiles,\n maxSize,\n dir: dirProp,\n label,\n name,\n asChild,\n disabled = false,\n invalid = false,\n multiple = false,\n required = false,\n children,\n className,\n ...rootProps\n } = props;\n\n const inputId = React.useId();\n const dropzoneId = React.useId();\n const listId = React.useId();\n const labelId = React.useId();\n\n const dir = useDirection(dirProp);\n const listeners = useLazyRef(() => new Set<() => void>()).current;\n const files = useLazyRef<Map<File, FileState>>(() => new Map()).current;\n const urlCache = useLazyRef(() => new WeakMap<File, string>()).current;\n const inputRef = React.useRef<HTMLInputElement>(null);\n const isControlled = value !== undefined;\n\n const propsRef = useAsRef({\n onValueChange,\n onAccept,\n onFileAccept,\n onFileReject,\n onFileValidate,\n onUpload,\n });\n\n const store = React.useMemo<Store>(() => {\n let state: StoreState = {\n files,\n dragOver: false,\n invalid: invalid,\n };\n\n function reducer(state: StoreState, action: StoreAction): StoreState {\n switch (action.type) {\n case \"ADD_FILES\": {\n for (const file of action.files) {\n files.set(file, {\n file,\n progress: 0,\n status: \"idle\",\n });\n }\n\n if (propsRef.current.onValueChange) {\n const fileList = Array.from(files.values()).map(\n (fileState) => fileState.file,\n );\n propsRef.current.onValueChange(fileList);\n }\n return { ...state, files };\n }\n\n case \"SET_FILES\": {\n const newFileSet = new Set(action.files);\n for (const existingFile of files.keys()) {\n if (!newFileSet.has(existingFile)) {\n files.delete(existingFile);\n }\n }\n\n for (const file of action.files) {\n const existingState = files.get(file);\n if (!existingState) {\n files.set(file, {\n file,\n progress: 0,\n status: \"idle\",\n });\n }\n }\n return { ...state, files };\n }\n\n case \"SET_PROGRESS\": {\n const fileState = files.get(action.file);\n if (fileState) {\n files.set(action.file, {\n ...fileState,\n progress: action.progress,\n status: \"uploading\",\n });\n }\n return { ...state, files };\n }\n\n case \"SET_SUCCESS\": {\n const fileState = files.get(action.file);\n if (fileState) {\n files.set(action.file, {\n ...fileState,\n progress: 100,\n status: \"success\",\n });\n }\n return { ...state, files };\n }\n\n case \"SET_ERROR\": {\n const fileState = files.get(action.file);\n if (fileState) {\n files.set(action.file, {\n ...fileState,\n error: action.error,\n status: \"error\",\n });\n }\n return { ...state, files };\n }\n\n case \"REMOVE_FILE\": {\n const cachedUrl = urlCache.get(action.file);\n if (cachedUrl) {\n URL.revokeObjectURL(cachedUrl);\n urlCache.delete(action.file);\n }\n\n files.delete(action.file);\n\n if (propsRef.current.onValueChange) {\n const fileList = Array.from(files.values()).map(\n (fileState) => fileState.file,\n );\n propsRef.current.onValueChange(fileList);\n }\n return { ...state, files };\n }\n\n case \"SET_DRAG_OVER\": {\n return { ...state, dragOver: action.dragOver };\n }\n\n case \"SET_INVALID\": {\n return { ...state, invalid: action.invalid };\n }\n\n case \"CLEAR\": {\n for (const file of files.keys()) {\n const cachedUrl = urlCache.get(file);\n if (cachedUrl) {\n URL.revokeObjectURL(cachedUrl);\n urlCache.delete(file);\n }\n }\n\n files.clear();\n if (propsRef.current.onValueChange) {\n propsRef.current.onValueChange([]);\n }\n return { ...state, files, invalid: false };\n }\n\n default:\n return state;\n }\n }\n\n return {\n getState: () => state,\n dispatch: (action) => {\n state = reducer(state, action);\n for (const listener of listeners) {\n listener();\n }\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n }, [listeners, files, invalid, propsRef, urlCache]);\n\n const acceptTypes = React.useMemo(\n () => accept?.split(\",\").map((t) => t.trim()) ?? null,\n [accept],\n );\n\n const onProgress = useLazyRef(() => {\n let frame = 0;\n return (file: File, progress: number) => {\n if (frame) return;\n frame = requestAnimationFrame(() => {\n frame = 0;\n store.dispatch({\n type: \"SET_PROGRESS\",\n file,\n progress: Math.min(Math.max(0, progress), 100),\n });\n });\n };\n }).current;\n\n React.useEffect(() => {\n if (isControlled) {\n store.dispatch({ type: \"SET_FILES\", files: value });\n } else if (\n defaultValue &&\n defaultValue.length > 0 &&\n !store.getState().files.size\n ) {\n store.dispatch({ type: \"SET_FILES\", files: defaultValue });\n }\n }, [value, defaultValue, isControlled, store]);\n\n React.useEffect(() => {\n return () => {\n for (const file of files.keys()) {\n const cachedUrl = urlCache.get(file);\n if (cachedUrl) {\n URL.revokeObjectURL(cachedUrl);\n }\n }\n };\n }, [files, urlCache]);\n\n const onFilesUpload = React.useCallback(\n async (files: File[]) => {\n try {\n for (const file of files) {\n store.dispatch({ type: \"SET_PROGRESS\", file, progress: 0 });\n }\n\n if (propsRef.current.onUpload) {\n await propsRef.current.onUpload(files, {\n onProgress,\n onSuccess: (file) => {\n store.dispatch({ type: \"SET_SUCCESS\", file });\n },\n onError: (file, error) => {\n store.dispatch({\n type: \"SET_ERROR\",\n file,\n error: error.message ?? \"Upload failed\",\n });\n },\n });\n } else {\n for (const file of files) {\n store.dispatch({ type: \"SET_SUCCESS\", file });\n }\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Upload failed\";\n for (const file of files) {\n store.dispatch({\n type: \"SET_ERROR\",\n file,\n error: errorMessage,\n });\n }\n }\n },\n [store, propsRef, onProgress],\n );\n\n const onFilesChange = React.useCallback(\n (originalFiles: File[]) => {\n if (disabled) return;\n\n let filesToProcess = [...originalFiles];\n let invalid = false;\n\n if (maxFiles) {\n const currentCount = store.getState().files.size;\n const remainingSlotCount = Math.max(0, maxFiles - currentCount);\n\n if (remainingSlotCount < filesToProcess.length) {\n const rejectedFiles = filesToProcess.slice(remainingSlotCount);\n invalid = true;\n\n filesToProcess = filesToProcess.slice(0, remainingSlotCount);\n\n for (const file of rejectedFiles) {\n let rejectionMessage = `Maximum ${maxFiles} files allowed`;\n\n if (propsRef.current.onFileValidate) {\n const validationMessage = propsRef.current.onFileValidate(file);\n if (validationMessage) {\n rejectionMessage = validationMessage;\n }\n }\n\n propsRef.current.onFileReject?.(file, rejectionMessage);\n }\n }\n }\n\n const acceptedFiles: File[] = [];\n const rejectedFiles: { file: File; message: string }[] = [];\n\n for (const file of filesToProcess) {\n let rejected = false;\n let rejectionMessage = \"\";\n\n if (propsRef.current.onFileValidate) {\n const validationMessage = propsRef.current.onFileValidate(file);\n if (validationMessage) {\n rejectionMessage = validationMessage;\n propsRef.current.onFileReject?.(file, rejectionMessage);\n rejected = true;\n invalid = true;\n continue;\n }\n }\n\n if (acceptTypes) {\n const fileType = file.type;\n const fileExtension = `.${file.name.split(\".\").pop()}`;\n\n if (\n !acceptTypes.some(\n (type) =>\n type === fileType ||\n type === fileExtension ||\n (type.includes(\"/*\") &&\n fileType.startsWith(type.replace(\"/*\", \"/\"))),\n )\n ) {\n rejectionMessage = \"File type not accepted\";\n propsRef.current.onFileReject?.(file, rejectionMessage);\n rejected = true;\n invalid = true;\n }\n }\n\n if (maxSize && file.size > maxSize) {\n rejectionMessage = \"File too large\";\n propsRef.current.onFileReject?.(file, rejectionMessage);\n rejected = true;\n invalid = true;\n }\n\n if (!rejected) {\n acceptedFiles.push(file);\n } else {\n rejectedFiles.push({ file, message: rejectionMessage });\n }\n }\n\n if (invalid) {\n store.dispatch({ type: \"SET_INVALID\", invalid });\n setTimeout(() => {\n store.dispatch({ type: \"SET_INVALID\", invalid: false });\n }, 2000);\n }\n\n if (acceptedFiles.length > 0) {\n store.dispatch({ type: \"ADD_FILES\", files: acceptedFiles });\n\n if (isControlled && propsRef.current.onValueChange) {\n const currentFiles = Array.from(store.getState().files.values()).map(\n (f) => f.file,\n );\n propsRef.current.onValueChange([...currentFiles]);\n }\n\n if (propsRef.current.onAccept) {\n propsRef.current.onAccept(acceptedFiles);\n }\n\n for (const file of acceptedFiles) {\n propsRef.current.onFileAccept?.(file);\n }\n\n if (propsRef.current.onUpload) {\n requestAnimationFrame(() => {\n onFilesUpload(acceptedFiles);\n });\n }\n }\n },\n [\n store,\n isControlled,\n propsRef,\n onFilesUpload,\n maxFiles,\n acceptTypes,\n maxSize,\n disabled,\n ],\n );\n\n const onInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files ?? []);\n onFilesChange(files);\n event.target.value = \"\";\n },\n [onFilesChange],\n );\n\n const contextValue = React.useMemo<FileUploadContextValue>(\n () => ({\n dropzoneId,\n inputId,\n listId,\n labelId,\n dir,\n disabled,\n inputRef,\n urlCache,\n }),\n [dropzoneId, inputId, listId, labelId, dir, disabled, urlCache],\n );\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StoreContext.Provider value={store}>\n <FileUploadContext.Provider value={contextValue}>\n <RootPrimitive\n data-disabled={disabled ? \"\" : undefined}\n data-slot=\"file-upload\"\n dir={dir}\n {...rootProps}\n className={cn(\"relative flex flex-col gap-2\", className)}\n >\n {children}\n <input\n type=\"file\"\n id={inputId}\n aria-labelledby={labelId}\n aria-describedby={dropzoneId}\n ref={inputRef}\n tabIndex={-1}\n accept={accept}\n name={name}\n className=\"sr-only\"\n disabled={disabled}\n multiple={multiple}\n required={required}\n onChange={onInputChange}\n />\n <div id={labelId} className=\"sr-only\">\n {label ?? \"File upload\"}\n </div>\n </RootPrimitive>\n </FileUploadContext.Provider>\n </StoreContext.Provider>\n );\n}\n\ninterface FileUploadDropzoneProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nfunction FileUploadDropzone(props: FileUploadDropzoneProps) {\n const {\n asChild,\n className,\n onClick: onClickProp,\n onDragOver: onDragOverProp,\n onDragEnter: onDragEnterProp,\n onDragLeave: onDragLeaveProp,\n onDrop: onDropProp,\n onPaste: onPasteProp,\n onKeyDown: onKeyDownProp,\n ...dropzoneProps\n } = props;\n\n const context = useFileUploadContext(DROPZONE_NAME);\n const store = useStoreContext(DROPZONE_NAME);\n const dragOver = useStore((state) => state.dragOver);\n const invalid = useStore((state) => state.invalid);\n\n const propsRef = useAsRef({\n onClick: onClickProp,\n onDragOver: onDragOverProp,\n onDragEnter: onDragEnterProp,\n onDragLeave: onDragLeaveProp,\n onDrop: onDropProp,\n onPaste: onPasteProp,\n onKeyDown: onKeyDownProp,\n });\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n propsRef.current.onClick?.(event);\n\n if (event.defaultPrevented) return;\n\n const target = event.target;\n\n const isFromTrigger =\n target instanceof HTMLElement &&\n target.closest('[data-slot=\"file-upload-trigger\"]');\n\n if (!isFromTrigger) {\n context.inputRef.current?.click();\n }\n },\n [context.inputRef, propsRef],\n );\n\n const onDragOver = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n propsRef.current.onDragOver?.(event);\n\n if (event.defaultPrevented) return;\n\n event.preventDefault();\n store.dispatch({ type: \"SET_DRAG_OVER\", dragOver: true });\n },\n [store, propsRef],\n );\n\n const onDragEnter = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n propsRef.current.onDragEnter?.(event);\n\n if (event.defaultPrevented) return;\n\n event.preventDefault();\n store.dispatch({ type: \"SET_DRAG_OVER\", dragOver: true });\n },\n [store, propsRef],\n );\n\n const onDragLeave = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n propsRef.current.onDragLeave?.(event);\n\n if (event.defaultPrevented) return;\n\n const relatedTarget = event.relatedTarget;\n if (\n relatedTarget &&\n relatedTarget instanceof Node &&\n event.currentTarget.contains(relatedTarget)\n ) {\n return;\n }\n\n event.preventDefault();\n store.dispatch({ type: \"SET_DRAG_OVER\", dragOver: false });\n },\n [store, propsRef],\n );\n\n const onDrop = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n propsRef.current.onDrop?.(event);\n\n if (event.defaultPrevented) return;\n\n event.preventDefault();\n store.dispatch({ type: \"SET_DRAG_OVER\", dragOver: false });\n\n const files = Array.from(event.dataTransfer.files);\n const inputElement = context.inputRef.current;\n if (!inputElement) return;\n\n const dataTransfer = new DataTransfer();\n for (const file of files) {\n dataTransfer.items.add(file);\n }\n\n inputElement.files = dataTransfer.files;\n inputElement.dispatchEvent(new Event(\"change\", { bubbles: true }));\n },\n [store, context.inputRef, propsRef],\n );\n\n const onPaste = React.useCallback(\n (event: React.ClipboardEvent<HTMLDivElement>) => {\n propsRef.current.onPaste?.(event);\n\n if (event.defaultPrevented) return;\n\n event.preventDefault();\n store.dispatch({ type: \"SET_DRAG_OVER\", dragOver: false });\n\n const items = event.clipboardData?.items;\n if (!items) return;\n\n const files: File[] = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item?.kind === \"file\") {\n const file = item.getAsFile();\n if (file) {\n files.push(file);\n }\n }\n }\n\n if (files.length === 0) return;\n\n const inputElement = context.inputRef.current;\n if (!inputElement) return;\n\n const dataTransfer = new DataTransfer();\n for (const file of files) {\n dataTransfer.items.add(file);\n }\n\n inputElement.files = dataTransfer.files;\n inputElement.dispatchEvent(new Event(\"change\", { bubbles: true }));\n },\n [store, context.inputRef, propsRef],\n );\n\n const onKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n propsRef.current.onKeyDown?.(event);\n\n if (\n !event.defaultPrevented &&\n (event.key === \"Enter\" || event.key === \" \")\n ) {\n event.preventDefault();\n context.inputRef.current?.click();\n }\n },\n [context.inputRef, propsRef],\n );\n\n const DropzonePrimitive = asChild ? Slot : \"div\";\n\n return (\n <DropzonePrimitive\n role=\"region\"\n id={context.dropzoneId}\n aria-controls={`${context.inputId} ${context.listId}`}\n aria-disabled={context.disabled}\n aria-invalid={invalid}\n data-disabled={context.disabled ? \"\" : undefined}\n data-dragging={dragOver ? \"\" : undefined}\n data-invalid={invalid ? \"\" : undefined}\n data-slot=\"file-upload-dropzone\"\n dir={context.dir}\n tabIndex={context.disabled ? undefined : 0}\n {...dropzoneProps}\n className={cn(\n \"relative flex select-none flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-6 outline-none transition-colors hover:bg-accent/30 focus-visible:border-ring/50 data-disabled:pointer-events-none data-dragging:border-primary/30 data-invalid:border-destructive data-dragging:bg-accent/30 data-invalid:ring-destructive/20\",\n className,\n )}\n onClick={onClick}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n />\n );\n}\n\ninterface FileUploadTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nfunction FileUploadTrigger(props: FileUploadTriggerProps) {\n const { asChild, onClick: onClickProp, ...triggerProps } = props;\n\n const context = useFileUploadContext(TRIGGER_NAME);\n\n const propsRef = useAsRef({\n onClick: onClickProp,\n });\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n propsRef.current.onClick?.(event);\n\n if (event.defaultPrevented) return;\n\n context.inputRef.current?.click();\n },\n [context.inputRef, propsRef],\n );\n\n const TriggerPrimitive = asChild ? Slot : \"button\";\n\n return (\n <TriggerPrimitive\n type=\"button\"\n aria-controls={context.inputId}\n data-disabled={context.disabled ? \"\" : undefined}\n data-slot=\"file-upload-trigger\"\n {...triggerProps}\n disabled={context.disabled}\n onClick={onClick}\n />\n );\n}\n\ninterface FileUploadListProps extends React.ComponentProps<\"div\"> {\n orientation?: \"horizontal\" | \"vertical\";\n asChild?: boolean;\n forceMount?: boolean;\n}\n\nfunction FileUploadList(props: FileUploadListProps) {\n const {\n className,\n orientation = \"vertical\",\n asChild,\n forceMount,\n ...listProps\n } = props;\n\n const context = useFileUploadContext(LIST_NAME);\n const fileCount = useStore((state) => state.files.size);\n const shouldRender = forceMount || fileCount > 0;\n\n if (!shouldRender) return null;\n\n const ListPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ListPrimitive\n role=\"list\"\n id={context.listId}\n aria-orientation={orientation}\n data-orientation={orientation}\n data-slot=\"file-upload-list\"\n data-state={shouldRender ? \"active\" : \"inactive\"}\n dir={context.dir}\n {...listProps}\n className={cn(\n \"data-[state=inactive]:fade-out-0 data-[state=active]:fade-in-0 data-[state=inactive]:slide-out-to-top-2 data-[state=active]:slide-in-from-top-2 flex flex-col gap-2 data-[state=active]:animate-in data-[state=inactive]:animate-out\",\n orientation === \"horizontal\" && \"flex-row overflow-x-auto p-1.5\",\n className,\n )}\n />\n );\n}\n\ninterface FileUploadItemContextValue {\n id: string;\n fileState: FileState | undefined;\n nameId: string;\n sizeId: string;\n statusId: string;\n messageId: string;\n}\n\nconst FileUploadItemContext =\n React.createContext<FileUploadItemContextValue | null>(null);\n\nfunction useFileUploadItemContext(consumerName: string) {\n const context = React.useContext(FileUploadItemContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ITEM_NAME}\\``);\n }\n return context;\n}\n\ninterface FileUploadItemProps extends React.ComponentProps<\"div\"> {\n value: File;\n asChild?: boolean;\n}\n\nfunction FileUploadItem(props: FileUploadItemProps) {\n const { value, asChild, className, ...itemProps } = props;\n\n const id = React.useId();\n const statusId = `${id}-status`;\n const nameId = `${id}-name`;\n const sizeId = `${id}-size`;\n const messageId = `${id}-message`;\n\n const context = useFileUploadContext(ITEM_NAME);\n const fileState = useStore((state) => state.files.get(value));\n const fileCount = useStore((state) => state.files.size);\n const fileIndex = useStore((state) => {\n const files = Array.from(state.files.keys());\n return files.indexOf(value) + 1;\n });\n\n const itemContext = React.useMemo(\n () => ({\n id,\n fileState,\n nameId,\n sizeId,\n statusId,\n messageId,\n }),\n [id, fileState, statusId, nameId, sizeId, messageId],\n );\n\n if (!fileState) return null;\n\n const statusText = fileState.error\n ? `Error: ${fileState.error}`\n : fileState.status === \"uploading\"\n ? `Uploading: ${fileState.progress}% complete`\n : fileState.status === \"success\"\n ? \"Upload complete\"\n : \"Ready to upload\";\n\n const ItemPrimitive = asChild ? Slot : \"div\";\n\n return (\n <FileUploadItemContext.Provider value={itemContext}>\n <ItemPrimitive\n role=\"listitem\"\n id={id}\n aria-setsize={fileCount}\n aria-posinset={fileIndex}\n aria-describedby={`${nameId} ${sizeId} ${statusId} ${\n fileState.error ? messageId : \"\"\n }`}\n aria-labelledby={nameId}\n data-slot=\"file-upload-item\"\n dir={context.dir}\n {...itemProps}\n className={cn(\n \"relative flex items-center gap-2.5 rounded-md border p-3\",\n className,\n )}\n >\n {props.children}\n <span id={statusId} className=\"sr-only\">\n {statusText}\n </span>\n </ItemPrimitive>\n </FileUploadItemContext.Provider>\n );\n}\n\ninterface FileUploadItemPreviewProps extends React.ComponentProps<\"div\"> {\n render?: (file: File, fallback: () => React.ReactNode) => React.ReactNode;\n asChild?: boolean;\n}\n\nfunction FileUploadItemPreview(props: FileUploadItemPreviewProps) {\n const { render, asChild, children, className, ...previewProps } = props;\n\n const itemContext = useFileUploadItemContext(ITEM_PREVIEW_NAME);\n const context = useFileUploadContext(ITEM_PREVIEW_NAME);\n\n const getDefaultRender = React.useCallback(\n (file: File) => {\n if (itemContext.fileState?.file.type.startsWith(\"image/\")) {\n let url = context.urlCache.get(file);\n if (!url) {\n url = URL.createObjectURL(file);\n context.urlCache.set(file, url);\n }\n\n return (\n // biome-ignore lint/performance/noImgElement: dynamic file URLs from user uploads don't work well with Next.js Image optimization\n <img src={url} alt={file.name} className=\"size-full object-cover\" />\n );\n }\n\n return getFileIcon(file);\n },\n [itemContext.fileState?.file.type, context.urlCache],\n );\n\n const onPreviewRender = React.useCallback(\n (file: File) => {\n if (render) {\n return render(file, () => getDefaultRender(file));\n }\n\n return getDefaultRender(file);\n },\n [render, getDefaultRender],\n );\n\n if (!itemContext.fileState) return null;\n\n const ItemPreviewPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ItemPreviewPrimitive\n aria-labelledby={itemContext.nameId}\n data-slot=\"file-upload-preview\"\n {...previewProps}\n className={cn(\n \"relative flex size-10 shrink-0 items-center justify-center overflow-hidden rounded border bg-accent/50 [&>svg]:size-10\",\n className,\n )}\n >\n {onPreviewRender(itemContext.fileState.file)}\n {children}\n </ItemPreviewPrimitive>\n );\n}\n\ninterface FileUploadItemMetadataProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n size?: \"default\" | \"sm\";\n}\n\nfunction FileUploadItemMetadata(props: FileUploadItemMetadataProps) {\n const {\n asChild,\n size = \"default\",\n children,\n className,\n ...metadataProps\n } = props;\n\n const context = useFileUploadContext(ITEM_METADATA_NAME);\n const itemContext = useFileUploadItemContext(ITEM_METADATA_NAME);\n\n if (!itemContext.fileState) return null;\n\n const ItemMetadataPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ItemMetadataPrimitive\n data-slot=\"file-upload-metadata\"\n dir={context.dir}\n {...metadataProps}\n className={cn(\"flex min-w-0 flex-1 flex-col\", className)}\n >\n {children ?? (\n <>\n <span\n id={itemContext.nameId}\n className={cn(\n \"truncate font-medium text-sm\",\n size === \"sm\" && \"font-normal text-[13px] leading-snug\",\n )}\n >\n {itemContext.fileState.file.name}\n </span>\n <span\n id={itemContext.sizeId}\n className={cn(\n \"truncate text-muted-foreground text-xs\",\n size === \"sm\" && \"text-[11px] leading-snug\",\n )}\n >\n {formatBytes(itemContext.fileState.file.size)}\n </span>\n {itemContext.fileState.error && (\n <span\n id={itemContext.messageId}\n className=\"text-destructive text-xs\"\n >\n {itemContext.fileState.error}\n </span>\n )}\n </>\n )}\n </ItemMetadataPrimitive>\n );\n}\ninterface FileUploadItemProgressProps extends React.ComponentProps<\"div\"> {\n variant?: \"linear\" | \"circular\" | \"fill\";\n size?: number;\n asChild?: boolean;\n forceMount?: boolean;\n}\n\nfunction FileUploadItemProgress(props: FileUploadItemProgressProps) {\n const {\n variant = \"linear\",\n size = 40,\n asChild,\n forceMount,\n className,\n ...progressProps\n } = props;\n\n const itemContext = useFileUploadItemContext(ITEM_PROGRESS_NAME);\n\n if (!itemContext.fileState) return null;\n\n const shouldRender = forceMount || itemContext.fileState.progress !== 100;\n\n if (!shouldRender) return null;\n\n const ItemProgressPrimitive = asChild ? Slot : \"div\";\n\n switch (variant) {\n case \"circular\": {\n const circumference = 2 * Math.PI * ((size - 4) / 2);\n const strokeDashoffset =\n circumference - (itemContext.fileState.progress / 100) * circumference;\n\n return (\n <ItemProgressPrimitive\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={itemContext.fileState.progress}\n aria-valuetext={`${itemContext.fileState.progress}%`}\n aria-labelledby={itemContext.nameId}\n data-slot=\"file-upload-progress\"\n {...progressProps}\n className={cn(\n \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n className,\n )}\n >\n <svg\n className=\"-rotate-90 transform\"\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n fill=\"none\"\n stroke=\"currentColor\"\n >\n <circle\n className=\"text-primary/20\"\n strokeWidth=\"2\"\n cx={size / 2}\n cy={size / 2}\n r={(size - 4) / 2}\n />\n <circle\n className=\"text-primary transition-[stroke-dashoffset] duration-300 ease-linear\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={strokeDashoffset}\n cx={size / 2}\n cy={size / 2}\n r={(size - 4) / 2}\n />\n </svg>\n </ItemProgressPrimitive>\n );\n }\n\n case \"fill\": {\n const progressPercentage = itemContext.fileState.progress;\n const topInset = 100 - progressPercentage;\n\n return (\n <ItemProgressPrimitive\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={progressPercentage}\n aria-valuetext={`${progressPercentage}%`}\n aria-labelledby={itemContext.nameId}\n data-slot=\"file-upload-progress\"\n {...progressProps}\n className={cn(\n \"absolute inset-0 bg-primary/50 transition-[clip-path] duration-300 ease-linear\",\n className,\n )}\n style={{\n clipPath: `inset(${topInset}% 0% 0% 0%)`,\n }}\n />\n );\n }\n\n default:\n return (\n <ItemProgressPrimitive\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={itemContext.fileState.progress}\n aria-valuetext={`${itemContext.fileState.progress}%`}\n aria-labelledby={itemContext.nameId}\n data-slot=\"file-upload-progress\"\n {...progressProps}\n className={cn(\n \"relative h-1.5 w-full overflow-hidden rounded-full bg-primary/20\",\n className,\n )}\n >\n <div\n className=\"h-full w-full flex-1 bg-primary transition-transform duration-300 ease-linear\"\n style={{\n transform: `translateX(-${100 - itemContext.fileState.progress}%)`,\n }}\n />\n </ItemProgressPrimitive>\n );\n }\n}\n\ninterface FileUploadItemDeleteProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nfunction FileUploadItemDelete(props: FileUploadItemDeleteProps) {\n const { asChild, onClick: onClickProp, ...deleteProps } = props;\n\n const store = useStoreContext(ITEM_DELETE_NAME);\n const itemContext = useFileUploadItemContext(ITEM_DELETE_NAME);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClickProp?.(event);\n\n if (!itemContext.fileState || event.defaultPrevented) return;\n\n store.dispatch({\n type: \"REMOVE_FILE\",\n file: itemContext.fileState.file,\n });\n },\n [store, itemContext.fileState, onClickProp],\n );\n\n if (!itemContext.fileState) return null;\n\n const ItemDeletePrimitive = asChild ? Slot : \"button\";\n\n return (\n <ItemDeletePrimitive\n type=\"button\"\n aria-controls={itemContext.id}\n aria-describedby={itemContext.nameId}\n data-slot=\"file-upload-item-delete\"\n {...deleteProps}\n onClick={onClick}\n />\n );\n}\n\ninterface FileUploadClearProps extends React.ComponentProps<\"button\"> {\n forceMount?: boolean;\n asChild?: boolean;\n}\n\nfunction FileUploadClear(props: FileUploadClearProps) {\n const {\n asChild,\n forceMount,\n disabled,\n onClick: onClickProp,\n ...clearProps\n } = props;\n\n const context = useFileUploadContext(CLEAR_NAME);\n const store = useStoreContext(CLEAR_NAME);\n const fileCount = useStore((state) => state.files.size);\n\n const isDisabled = disabled || context.disabled;\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClickProp?.(event);\n\n if (event.defaultPrevented) return;\n\n store.dispatch({ type: \"CLEAR\" });\n },\n [store, onClickProp],\n );\n\n const shouldRender = forceMount || fileCount > 0;\n\n if (!shouldRender) return null;\n\n const ClearPrimitive = asChild ? Slot : \"button\";\n\n return (\n <ClearPrimitive\n type=\"button\"\n aria-controls={context.listId}\n data-slot=\"file-upload-clear\"\n data-disabled={isDisabled ? \"\" : undefined}\n {...clearProps}\n disabled={isDisabled}\n onClick={onClick}\n />\n );\n}\n\nexport {\n FileUpload,\n FileUploadDropzone,\n FileUploadTrigger,\n FileUploadList,\n FileUploadItem,\n FileUploadItemPreview,\n FileUploadItemMetadata,\n FileUploadItemProgress,\n FileUploadItemDelete,\n FileUploadClear,\n //\n useStore as useFileUpload,\n //\n type FileUploadProps,\n};\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
interface DivProps extends React.ComponentProps<"div"> {
|
|
5
|
+
asChild?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface PathProps extends React.ComponentProps<"path"> {
|
|
8
|
+
}
|
|
9
|
+
interface GaugeProps extends DivProps {
|
|
10
|
+
value?: number | null | undefined;
|
|
11
|
+
getValueText?(value: number, min: number, max: number): string;
|
|
12
|
+
min?: number;
|
|
13
|
+
max?: number;
|
|
14
|
+
size?: number;
|
|
15
|
+
thickness?: number;
|
|
16
|
+
startAngle?: number;
|
|
17
|
+
endAngle?: number;
|
|
18
|
+
}
|
|
19
|
+
declare function Gauge(props: GaugeProps): react_jsx_runtime.JSX.Element;
|
|
20
|
+
declare function GaugeIndicator(props: React.ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
|
|
21
|
+
declare function GaugeTrack(props: PathProps): react_jsx_runtime.JSX.Element;
|
|
22
|
+
declare function GaugeRange(props: PathProps): react_jsx_runtime.JSX.Element;
|
|
23
|
+
declare function GaugeValueText(props: DivProps): react_jsx_runtime.JSX.Element;
|
|
24
|
+
declare function GaugeLabel(props: DivProps): react_jsx_runtime.JSX.Element;
|
|
25
|
+
declare function GaugeCombined(props: GaugeProps): react_jsx_runtime.JSX.Element;
|
|
26
|
+
|
|
27
|
+
export { Gauge, GaugeCombined, GaugeIndicator, GaugeLabel, type GaugeProps, GaugeRange, GaugeTrack, GaugeValueText };
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { clsx } from 'clsx';
|
|
4
|
+
import { twMerge } from 'tailwind-merge';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
function cn(...inputs) {
|
|
8
|
+
return twMerge(clsx(inputs));
|
|
9
|
+
}
|
|
10
|
+
var GAUGE_NAME = "Gauge";
|
|
11
|
+
var INDICATOR_NAME = "GaugeIndicator";
|
|
12
|
+
var TRACK_NAME = "GaugeTrack";
|
|
13
|
+
var RANGE_NAME = "GaugeRange";
|
|
14
|
+
var VALUE_TEXT_NAME = "GaugeValueText";
|
|
15
|
+
var LABEL_NAME = "GaugeLabel";
|
|
16
|
+
var DEFAULT_MAX = 100;
|
|
17
|
+
var DEFAULT_START_ANGLE = 0;
|
|
18
|
+
var DEFAULT_END_ANGLE = 360;
|
|
19
|
+
function getGaugeState(value, maxValue) {
|
|
20
|
+
return value == null ? "indeterminate" : value === maxValue ? "complete" : "loading";
|
|
21
|
+
}
|
|
22
|
+
function getIsValidNumber(value) {
|
|
23
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
24
|
+
}
|
|
25
|
+
function getIsValidMaxNumber(max) {
|
|
26
|
+
return getIsValidNumber(max) && max > 0;
|
|
27
|
+
}
|
|
28
|
+
function getIsValidValueNumber(value, min, max) {
|
|
29
|
+
return getIsValidNumber(value) && value <= max && value >= min;
|
|
30
|
+
}
|
|
31
|
+
function getDefaultValueText(value, min, max) {
|
|
32
|
+
const percentage = max === min ? 100 : (value - min) / (max - min) * 100;
|
|
33
|
+
return Math.round(percentage).toString();
|
|
34
|
+
}
|
|
35
|
+
function getInvalidValueError(propValue, componentName) {
|
|
36
|
+
return `Invalid prop \`value\` of value \`${propValue}\` supplied to \`${componentName}\`. The \`value\` prop must be a number between \`min\` and \`max\` (inclusive), or \`null\`/\`undefined\` for indeterminate state. The value will be clamped to the valid range.`;
|
|
37
|
+
}
|
|
38
|
+
function getInvalidMaxError(propValue, componentName) {
|
|
39
|
+
return `Invalid prop \`max\` of value \`${propValue}\` supplied to \`${componentName}\`. Only numbers greater than 0 are valid. Defaulting to ${DEFAULT_MAX}.`;
|
|
40
|
+
}
|
|
41
|
+
function getNormalizedAngle(angle) {
|
|
42
|
+
return (angle % 360 + 360) % 360;
|
|
43
|
+
}
|
|
44
|
+
function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
|
|
45
|
+
const angleInRadians = (angleInDegrees - 90) * Math.PI / 180;
|
|
46
|
+
return {
|
|
47
|
+
x: centerX + radius * Math.cos(angleInRadians),
|
|
48
|
+
y: centerY + radius * Math.sin(angleInRadians)
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function describeArc(x, y, radius, startAngle, endAngle) {
|
|
52
|
+
const angleDiff = endAngle - startAngle;
|
|
53
|
+
if (Math.abs(angleDiff) >= 360) {
|
|
54
|
+
const start2 = polarToCartesian(x, y, radius, startAngle);
|
|
55
|
+
const mid = polarToCartesian(x, y, radius, startAngle + 180);
|
|
56
|
+
return [
|
|
57
|
+
"M",
|
|
58
|
+
start2.x,
|
|
59
|
+
start2.y,
|
|
60
|
+
"A",
|
|
61
|
+
radius,
|
|
62
|
+
radius,
|
|
63
|
+
0,
|
|
64
|
+
0,
|
|
65
|
+
1,
|
|
66
|
+
mid.x,
|
|
67
|
+
mid.y,
|
|
68
|
+
"A",
|
|
69
|
+
radius,
|
|
70
|
+
radius,
|
|
71
|
+
0,
|
|
72
|
+
0,
|
|
73
|
+
1,
|
|
74
|
+
start2.x,
|
|
75
|
+
start2.y
|
|
76
|
+
].join(" ");
|
|
77
|
+
}
|
|
78
|
+
const start = polarToCartesian(x, y, radius, startAngle);
|
|
79
|
+
const end = polarToCartesian(x, y, radius, endAngle);
|
|
80
|
+
const largeArcFlag = angleDiff <= 180 ? "0" : "1";
|
|
81
|
+
return [
|
|
82
|
+
"M",
|
|
83
|
+
start.x,
|
|
84
|
+
start.y,
|
|
85
|
+
"A",
|
|
86
|
+
radius,
|
|
87
|
+
radius,
|
|
88
|
+
0,
|
|
89
|
+
largeArcFlag,
|
|
90
|
+
1,
|
|
91
|
+
end.x,
|
|
92
|
+
end.y
|
|
93
|
+
].join(" ");
|
|
94
|
+
}
|
|
95
|
+
var GaugeContext = React.createContext(null);
|
|
96
|
+
function useGaugeContext(consumerName) {
|
|
97
|
+
const context = React.useContext(GaugeContext);
|
|
98
|
+
if (!context) {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`\`${consumerName}\` must be used within \`${GAUGE_NAME}\``
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
return context;
|
|
104
|
+
}
|
|
105
|
+
function Gauge(props) {
|
|
106
|
+
const {
|
|
107
|
+
value: valueProp = null,
|
|
108
|
+
getValueText = getDefaultValueText,
|
|
109
|
+
min: minProp = 0,
|
|
110
|
+
max: maxProp,
|
|
111
|
+
size = 120,
|
|
112
|
+
thickness = 8,
|
|
113
|
+
startAngle = DEFAULT_START_ANGLE,
|
|
114
|
+
endAngle = DEFAULT_END_ANGLE,
|
|
115
|
+
asChild,
|
|
116
|
+
className,
|
|
117
|
+
...rootProps
|
|
118
|
+
} = props;
|
|
119
|
+
if ((maxProp || maxProp === 0) && !getIsValidMaxNumber(maxProp)) {
|
|
120
|
+
if (process.env.NODE_ENV !== "production") {
|
|
121
|
+
console.error(getInvalidMaxError(`${maxProp}`, GAUGE_NAME));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const rawMax = getIsValidMaxNumber(maxProp) ? maxProp : DEFAULT_MAX;
|
|
125
|
+
const min = getIsValidNumber(minProp) ? minProp : 0;
|
|
126
|
+
const max = rawMax <= min ? min + 1 : rawMax;
|
|
127
|
+
if (process.env.NODE_ENV !== "production" && thickness >= size) {
|
|
128
|
+
console.warn(
|
|
129
|
+
`Gauge: thickness (${thickness}) should be less than size (${size}) for proper rendering.`
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
if (valueProp !== null && !getIsValidValueNumber(valueProp, min, max)) {
|
|
133
|
+
if (process.env.NODE_ENV !== "production") {
|
|
134
|
+
console.error(getInvalidValueError(`${valueProp}`, GAUGE_NAME));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const value = getIsValidValueNumber(valueProp, min, max) ? valueProp : getIsValidNumber(valueProp) && valueProp > max ? max : getIsValidNumber(valueProp) && valueProp < min ? min : null;
|
|
138
|
+
const valueText = getIsValidNumber(value) ? getValueText(value, min, max) : void 0;
|
|
139
|
+
const state = getGaugeState(value, max);
|
|
140
|
+
const radius = Math.max(0, (size - thickness) / 2);
|
|
141
|
+
const center = size / 2;
|
|
142
|
+
const angleDiff = Math.abs(endAngle - startAngle);
|
|
143
|
+
const arcLength = Math.min(angleDiff, 360) / 360 * (2 * Math.PI * radius);
|
|
144
|
+
const percentage = getIsValidNumber(value) ? max === min ? 1 : (value - min) / (max - min) : null;
|
|
145
|
+
const angleDiffDeg = Math.abs(endAngle - startAngle);
|
|
146
|
+
const isFullCircle = angleDiffDeg >= 360;
|
|
147
|
+
let arcCenterY = center;
|
|
148
|
+
if (!isFullCircle) {
|
|
149
|
+
const startRad = startAngle * Math.PI / 180;
|
|
150
|
+
const endRad = endAngle * Math.PI / 180;
|
|
151
|
+
const startY = center - radius * Math.cos(startRad);
|
|
152
|
+
const endY = center - radius * Math.cos(endRad);
|
|
153
|
+
let minY = Math.min(startY, endY);
|
|
154
|
+
let maxY = Math.max(startY, endY);
|
|
155
|
+
const normStart = getNormalizedAngle(startAngle);
|
|
156
|
+
const normEnd = getNormalizedAngle(endAngle);
|
|
157
|
+
const includesTop = normStart > normEnd ? normStart <= 270 || normEnd >= 270 : normStart <= 270 && normEnd >= 270;
|
|
158
|
+
const includesBottom = normStart > normEnd ? normStart <= 90 || normEnd >= 90 : normStart <= 90 && normEnd >= 90;
|
|
159
|
+
if (includesTop) minY = Math.min(minY, center - radius);
|
|
160
|
+
if (includesBottom) maxY = Math.max(maxY, center + radius);
|
|
161
|
+
arcCenterY = (minY + maxY) / 2;
|
|
162
|
+
}
|
|
163
|
+
const labelId = React.useId();
|
|
164
|
+
const valueTextId = React.useId();
|
|
165
|
+
const contextValue = React.useMemo(
|
|
166
|
+
() => ({
|
|
167
|
+
value,
|
|
168
|
+
valueText,
|
|
169
|
+
max,
|
|
170
|
+
min,
|
|
171
|
+
state,
|
|
172
|
+
radius,
|
|
173
|
+
thickness,
|
|
174
|
+
size,
|
|
175
|
+
center,
|
|
176
|
+
percentage,
|
|
177
|
+
startAngle,
|
|
178
|
+
endAngle,
|
|
179
|
+
arcLength,
|
|
180
|
+
arcCenterY,
|
|
181
|
+
valueTextId,
|
|
182
|
+
labelId
|
|
183
|
+
}),
|
|
184
|
+
[
|
|
185
|
+
value,
|
|
186
|
+
valueText,
|
|
187
|
+
max,
|
|
188
|
+
min,
|
|
189
|
+
state,
|
|
190
|
+
radius,
|
|
191
|
+
thickness,
|
|
192
|
+
size,
|
|
193
|
+
center,
|
|
194
|
+
percentage,
|
|
195
|
+
startAngle,
|
|
196
|
+
endAngle,
|
|
197
|
+
arcLength,
|
|
198
|
+
arcCenterY,
|
|
199
|
+
valueTextId,
|
|
200
|
+
labelId
|
|
201
|
+
]
|
|
202
|
+
);
|
|
203
|
+
const RootPrimitive = asChild ? Slot : "div";
|
|
204
|
+
return /* @__PURE__ */ jsx(GaugeContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
205
|
+
RootPrimitive,
|
|
206
|
+
{
|
|
207
|
+
role: "meter",
|
|
208
|
+
"aria-describedby": valueText ? valueTextId : void 0,
|
|
209
|
+
"aria-labelledby": labelId,
|
|
210
|
+
"aria-valuemax": max,
|
|
211
|
+
"aria-valuemin": min,
|
|
212
|
+
"aria-valuenow": getIsValidNumber(value) ? value : void 0,
|
|
213
|
+
"aria-valuetext": valueText,
|
|
214
|
+
"data-state": state,
|
|
215
|
+
"data-value": value ?? void 0,
|
|
216
|
+
"data-max": max,
|
|
217
|
+
"data-min": min,
|
|
218
|
+
"data-percentage": percentage,
|
|
219
|
+
...rootProps,
|
|
220
|
+
className: cn(
|
|
221
|
+
"relative inline-flex w-fit flex-col items-center justify-center",
|
|
222
|
+
className
|
|
223
|
+
)
|
|
224
|
+
}
|
|
225
|
+
) });
|
|
226
|
+
}
|
|
227
|
+
function GaugeIndicator(props) {
|
|
228
|
+
const { className, ...indicatorProps } = props;
|
|
229
|
+
const { size, state, value, max, min, percentage } = useGaugeContext(INDICATOR_NAME);
|
|
230
|
+
return /* @__PURE__ */ jsx(
|
|
231
|
+
"svg",
|
|
232
|
+
{
|
|
233
|
+
"aria-hidden": "true",
|
|
234
|
+
focusable: "false",
|
|
235
|
+
viewBox: `0 0 ${size} ${size}`,
|
|
236
|
+
"data-state": state,
|
|
237
|
+
"data-value": value ?? void 0,
|
|
238
|
+
"data-max": max,
|
|
239
|
+
"data-min": min,
|
|
240
|
+
"data-percentage": percentage,
|
|
241
|
+
width: size,
|
|
242
|
+
height: size,
|
|
243
|
+
...indicatorProps,
|
|
244
|
+
className: cn("transform", className)
|
|
245
|
+
}
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
function GaugeTrack(props) {
|
|
249
|
+
const { className, ...trackProps } = props;
|
|
250
|
+
const { center, radius, startAngle, endAngle, thickness, state } = useGaugeContext(TRACK_NAME);
|
|
251
|
+
const pathData = describeArc(center, center, radius, startAngle, endAngle);
|
|
252
|
+
return /* @__PURE__ */ jsx(
|
|
253
|
+
"path",
|
|
254
|
+
{
|
|
255
|
+
"data-state": state,
|
|
256
|
+
d: pathData,
|
|
257
|
+
fill: "none",
|
|
258
|
+
stroke: "currentColor",
|
|
259
|
+
strokeWidth: thickness,
|
|
260
|
+
strokeLinecap: "round",
|
|
261
|
+
vectorEffect: "non-scaling-stroke",
|
|
262
|
+
...trackProps,
|
|
263
|
+
className: cn("text-muted-foreground/20", className)
|
|
264
|
+
}
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
function GaugeRange(props) {
|
|
268
|
+
const { className, ...rangeProps } = props;
|
|
269
|
+
const {
|
|
270
|
+
center,
|
|
271
|
+
radius,
|
|
272
|
+
startAngle,
|
|
273
|
+
endAngle,
|
|
274
|
+
value,
|
|
275
|
+
max,
|
|
276
|
+
min,
|
|
277
|
+
state,
|
|
278
|
+
thickness,
|
|
279
|
+
arcLength,
|
|
280
|
+
percentage
|
|
281
|
+
} = useGaugeContext(RANGE_NAME);
|
|
282
|
+
const pathData = describeArc(center, center, radius, startAngle, endAngle);
|
|
283
|
+
const strokeDasharray = arcLength;
|
|
284
|
+
const strokeDashoffset = state === "indeterminate" ? 0 : percentage !== null ? arcLength - percentage * arcLength : arcLength;
|
|
285
|
+
return /* @__PURE__ */ jsx(
|
|
286
|
+
"path",
|
|
287
|
+
{
|
|
288
|
+
"data-state": state,
|
|
289
|
+
"data-value": value ?? void 0,
|
|
290
|
+
"data-max": max,
|
|
291
|
+
"data-min": min,
|
|
292
|
+
d: pathData,
|
|
293
|
+
fill: "none",
|
|
294
|
+
stroke: "currentColor",
|
|
295
|
+
strokeWidth: thickness,
|
|
296
|
+
strokeLinecap: "round",
|
|
297
|
+
strokeDasharray,
|
|
298
|
+
strokeDashoffset,
|
|
299
|
+
vectorEffect: "non-scaling-stroke",
|
|
300
|
+
...rangeProps,
|
|
301
|
+
className: cn(
|
|
302
|
+
"text-primary transition-[stroke-dashoffset] duration-700 ease-out",
|
|
303
|
+
className
|
|
304
|
+
)
|
|
305
|
+
}
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
function GaugeValueText(props) {
|
|
309
|
+
const { asChild, className, children, style, ...valueTextProps } = props;
|
|
310
|
+
const { valueTextId, state, arcCenterY, valueText } = useGaugeContext(VALUE_TEXT_NAME);
|
|
311
|
+
const ValueTextPrimitive = asChild ? Slot : "div";
|
|
312
|
+
return /* @__PURE__ */ jsx(
|
|
313
|
+
ValueTextPrimitive,
|
|
314
|
+
{
|
|
315
|
+
id: valueTextId,
|
|
316
|
+
"data-state": state,
|
|
317
|
+
...valueTextProps,
|
|
318
|
+
style: {
|
|
319
|
+
top: `${arcCenterY}px`,
|
|
320
|
+
...style
|
|
321
|
+
},
|
|
322
|
+
className: cn(
|
|
323
|
+
"absolute right-0 left-0 flex -translate-y-1/2 items-center justify-center font-semibold text-2xl",
|
|
324
|
+
className
|
|
325
|
+
),
|
|
326
|
+
children: children ?? valueText
|
|
327
|
+
}
|
|
328
|
+
);
|
|
329
|
+
}
|
|
330
|
+
function GaugeLabel(props) {
|
|
331
|
+
const { asChild, className, ...labelProps } = props;
|
|
332
|
+
const { labelId, state } = useGaugeContext(LABEL_NAME);
|
|
333
|
+
const LabelPrimitive = asChild ? Slot : "div";
|
|
334
|
+
return /* @__PURE__ */ jsx(
|
|
335
|
+
LabelPrimitive,
|
|
336
|
+
{
|
|
337
|
+
id: labelId,
|
|
338
|
+
"data-state": state,
|
|
339
|
+
...labelProps,
|
|
340
|
+
className: cn(
|
|
341
|
+
"mt-2 font-medium text-muted-foreground text-sm",
|
|
342
|
+
className
|
|
343
|
+
)
|
|
344
|
+
}
|
|
345
|
+
);
|
|
346
|
+
}
|
|
347
|
+
function GaugeCombined(props) {
|
|
348
|
+
return /* @__PURE__ */ jsxs(Gauge, { ...props, children: [
|
|
349
|
+
/* @__PURE__ */ jsxs(GaugeIndicator, { children: [
|
|
350
|
+
/* @__PURE__ */ jsx(GaugeTrack, {}),
|
|
351
|
+
/* @__PURE__ */ jsx(GaugeRange, {})
|
|
352
|
+
] }),
|
|
353
|
+
/* @__PURE__ */ jsx(GaugeValueText, {})
|
|
354
|
+
] });
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
export { Gauge, GaugeCombined, GaugeIndicator, GaugeLabel, GaugeRange, GaugeTrack, GaugeValueText };
|
|
358
|
+
//# sourceMappingURL=gauge.js.map
|
|
359
|
+
//# sourceMappingURL=gauge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/radix-vega/gauge.tsx"],"names":["start"],"mappings":"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","file":"gauge.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merges Tailwind class names, resolving any conflicts.\n *\n * @param inputs - An array of class names to merge.\n * @returns A string of merged and optimized class names.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nconst GAUGE_NAME = \"Gauge\";\nconst INDICATOR_NAME = \"GaugeIndicator\";\nconst TRACK_NAME = \"GaugeTrack\";\nconst RANGE_NAME = \"GaugeRange\";\nconst VALUE_TEXT_NAME = \"GaugeValueText\";\nconst LABEL_NAME = \"GaugeLabel\";\n\nconst DEFAULT_MAX = 100;\nconst DEFAULT_START_ANGLE = 0;\nconst DEFAULT_END_ANGLE = 360;\n\ntype GaugeState = \"indeterminate\" | \"complete\" | \"loading\";\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\ninterface PathProps extends React.ComponentProps<\"path\"> {}\n\nfunction getGaugeState(\n value: number | undefined | null,\n maxValue: number,\n): GaugeState {\n return value == null\n ? \"indeterminate\"\n : value === maxValue\n ? \"complete\"\n : \"loading\";\n}\n\nfunction getIsValidNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction getIsValidMaxNumber(max: unknown): max is number {\n return getIsValidNumber(max) && max > 0;\n}\n\nfunction getIsValidValueNumber(\n value: unknown,\n min: number,\n max: number,\n): value is number {\n return getIsValidNumber(value) && value <= max && value >= min;\n}\n\nfunction getDefaultValueText(value: number, min: number, max: number): string {\n const percentage = max === min ? 100 : ((value - min) / (max - min)) * 100;\n return Math.round(percentage).toString();\n}\n\nfunction getInvalidValueError(\n propValue: string,\n componentName: string,\n): string {\n return `Invalid prop \\`value\\` of value \\`${propValue}\\` supplied to \\`${componentName}\\`. The \\`value\\` prop must be a number between \\`min\\` and \\`max\\` (inclusive), or \\`null\\`/\\`undefined\\` for indeterminate state. The value will be clamped to the valid range.`;\n}\n\nfunction getInvalidMaxError(propValue: string, componentName: string): string {\n return `Invalid prop \\`max\\` of value \\`${propValue}\\` supplied to \\`${componentName}\\`. Only numbers greater than 0 are valid. Defaulting to ${DEFAULT_MAX}.`;\n}\n\nfunction getNormalizedAngle(angle: number) {\n return ((angle % 360) + 360) % 360;\n}\n\nfunction polarToCartesian(\n centerX: number,\n centerY: number,\n radius: number,\n angleInDegrees: number,\n) {\n const angleInRadians = ((angleInDegrees - 90) * Math.PI) / 180.0;\n return {\n x: centerX + radius * Math.cos(angleInRadians),\n y: centerY + radius * Math.sin(angleInRadians),\n };\n}\n\nfunction describeArc(\n x: number,\n y: number,\n radius: number,\n startAngle: number,\n endAngle: number,\n) {\n const angleDiff = endAngle - startAngle;\n\n // For full circles (360 degrees), draw as two semi-circles\n if (Math.abs(angleDiff) >= 360) {\n const start = polarToCartesian(x, y, radius, startAngle);\n const mid = polarToCartesian(x, y, radius, startAngle + 180);\n return [\n \"M\",\n start.x,\n start.y,\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n mid.x,\n mid.y,\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n start.x,\n start.y,\n ].join(\" \");\n }\n\n const start = polarToCartesian(x, y, radius, startAngle);\n const end = polarToCartesian(x, y, radius, endAngle);\n const largeArcFlag = angleDiff <= 180 ? \"0\" : \"1\";\n\n return [\n \"M\",\n start.x,\n start.y,\n \"A\",\n radius,\n radius,\n 0,\n largeArcFlag,\n 1,\n end.x,\n end.y,\n ].join(\" \");\n}\n\ninterface GaugeContextValue {\n value: number | null;\n valueText: string | undefined;\n max: number;\n min: number;\n state: GaugeState;\n radius: number;\n thickness: number;\n size: number;\n center: number;\n percentage: number | null;\n startAngle: number;\n endAngle: number;\n arcLength: number;\n arcCenterY: number;\n valueTextId?: string;\n labelId?: string;\n}\n\nconst GaugeContext = React.createContext<GaugeContextValue | null>(null);\n\nfunction useGaugeContext(consumerName: string) {\n const context = React.useContext(GaugeContext);\n if (!context) {\n throw new Error(\n `\\`${consumerName}\\` must be used within \\`${GAUGE_NAME}\\``,\n );\n }\n return context;\n}\n\ninterface GaugeProps extends DivProps {\n value?: number | null | undefined;\n getValueText?(value: number, min: number, max: number): string;\n min?: number;\n max?: number;\n size?: number;\n thickness?: number;\n startAngle?: number;\n endAngle?: number;\n}\n\nfunction Gauge(props: GaugeProps) {\n const {\n value: valueProp = null,\n getValueText = getDefaultValueText,\n min: minProp = 0,\n max: maxProp,\n size = 120,\n thickness = 8,\n startAngle = DEFAULT_START_ANGLE,\n endAngle = DEFAULT_END_ANGLE,\n asChild,\n className,\n ...rootProps\n } = props;\n\n if ((maxProp || maxProp === 0) && !getIsValidMaxNumber(maxProp)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(getInvalidMaxError(`${maxProp}`, GAUGE_NAME));\n }\n }\n\n const rawMax = getIsValidMaxNumber(maxProp) ? maxProp : DEFAULT_MAX;\n const min = getIsValidNumber(minProp) ? minProp : 0;\n const max = rawMax <= min ? min + 1 : rawMax;\n\n if (process.env.NODE_ENV !== \"production\" && thickness >= size) {\n console.warn(\n `Gauge: thickness (${thickness}) should be less than size (${size}) for proper rendering.`,\n );\n }\n\n if (valueProp !== null && !getIsValidValueNumber(valueProp, min, max)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(getInvalidValueError(`${valueProp}`, GAUGE_NAME));\n }\n }\n\n const value = getIsValidValueNumber(valueProp, min, max)\n ? valueProp\n : getIsValidNumber(valueProp) && valueProp > max\n ? max\n : getIsValidNumber(valueProp) && valueProp < min\n ? min\n : null;\n\n const valueText = getIsValidNumber(value)\n ? getValueText(value, min, max)\n : undefined;\n const state = getGaugeState(value, max);\n const radius = Math.max(0, (size - thickness) / 2);\n const center = size / 2;\n\n const angleDiff = Math.abs(endAngle - startAngle);\n const arcLength = (Math.min(angleDiff, 360) / 360) * (2 * Math.PI * radius);\n\n const percentage = getIsValidNumber(value)\n ? max === min\n ? 1\n : (value - min) / (max - min)\n : null;\n\n // Calculate the visual center Y of the arc for text positioning\n // For full circles, use geometric center. For partial arcs, calculate based on bounding box\n const angleDiffDeg = Math.abs(endAngle - startAngle);\n const isFullCircle = angleDiffDeg >= 360;\n\n let arcCenterY = center;\n if (!isFullCircle) {\n const startRad = (startAngle * Math.PI) / 180;\n const endRad = (endAngle * Math.PI) / 180;\n\n const startY = center - radius * Math.cos(startRad);\n const endY = center - radius * Math.cos(endRad);\n\n let minY = Math.min(startY, endY);\n let maxY = Math.max(startY, endY);\n\n const normStart = getNormalizedAngle(startAngle);\n const normEnd = getNormalizedAngle(endAngle);\n\n const includesTop =\n normStart > normEnd\n ? normStart <= 270 || normEnd >= 270\n : normStart <= 270 && normEnd >= 270;\n const includesBottom =\n normStart > normEnd\n ? normStart <= 90 || normEnd >= 90\n : normStart <= 90 && normEnd >= 90;\n\n if (includesTop) minY = Math.min(minY, center - radius);\n if (includesBottom) maxY = Math.max(maxY, center + radius);\n\n arcCenterY = (minY + maxY) / 2;\n }\n\n const labelId = React.useId();\n const valueTextId = React.useId();\n\n const contextValue = React.useMemo<GaugeContextValue>(\n () => ({\n value,\n valueText,\n max,\n min,\n state,\n radius,\n thickness,\n size,\n center,\n percentage,\n startAngle,\n endAngle,\n arcLength,\n arcCenterY,\n valueTextId,\n labelId,\n }),\n [\n value,\n valueText,\n max,\n min,\n state,\n radius,\n thickness,\n size,\n center,\n percentage,\n startAngle,\n endAngle,\n arcLength,\n arcCenterY,\n valueTextId,\n labelId,\n ],\n );\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <GaugeContext.Provider value={contextValue}>\n <RootPrimitive\n role=\"meter\"\n aria-describedby={valueText ? valueTextId : undefined}\n aria-labelledby={labelId}\n aria-valuemax={max}\n aria-valuemin={min}\n aria-valuenow={getIsValidNumber(value) ? value : undefined}\n aria-valuetext={valueText}\n data-state={state}\n data-value={value ?? undefined}\n data-max={max}\n data-min={min}\n data-percentage={percentage}\n {...rootProps}\n className={cn(\n \"relative inline-flex w-fit flex-col items-center justify-center\",\n className,\n )}\n />\n </GaugeContext.Provider>\n );\n}\n\nfunction GaugeIndicator(props: React.ComponentProps<\"svg\">) {\n const { className, ...indicatorProps } = props;\n\n const { size, state, value, max, min, percentage } =\n useGaugeContext(INDICATOR_NAME);\n\n return (\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n viewBox={`0 0 ${size} ${size}`}\n data-state={state}\n data-value={value ?? undefined}\n data-max={max}\n data-min={min}\n data-percentage={percentage}\n width={size}\n height={size}\n {...indicatorProps}\n className={cn(\"transform\", className)}\n />\n );\n}\n\nfunction GaugeTrack(props: PathProps) {\n const { className, ...trackProps } = props;\n\n const { center, radius, startAngle, endAngle, thickness, state } =\n useGaugeContext(TRACK_NAME);\n\n const pathData = describeArc(center, center, radius, startAngle, endAngle);\n\n return (\n <path\n data-state={state}\n d={pathData}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n {...trackProps}\n className={cn(\"text-muted-foreground/20\", className)}\n />\n );\n}\n\nfunction GaugeRange(props: PathProps) {\n const { className, ...rangeProps } = props;\n\n const {\n center,\n radius,\n startAngle,\n endAngle,\n value,\n max,\n min,\n state,\n thickness,\n arcLength,\n percentage,\n } = useGaugeContext(RANGE_NAME);\n\n const pathData = describeArc(center, center, radius, startAngle, endAngle);\n\n const strokeDasharray = arcLength;\n const strokeDashoffset =\n state === \"indeterminate\"\n ? 0\n : percentage !== null\n ? arcLength - percentage * arcLength\n : arcLength;\n\n return (\n <path\n data-state={state}\n data-value={value ?? undefined}\n data-max={max}\n data-min={min}\n d={pathData}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n strokeDasharray={strokeDasharray}\n strokeDashoffset={strokeDashoffset}\n vectorEffect=\"non-scaling-stroke\"\n {...rangeProps}\n className={cn(\n \"text-primary transition-[stroke-dashoffset] duration-700 ease-out\",\n className,\n )}\n />\n );\n}\n\nfunction GaugeValueText(props: DivProps) {\n const { asChild, className, children, style, ...valueTextProps } = props;\n\n const { valueTextId, state, arcCenterY, valueText } =\n useGaugeContext(VALUE_TEXT_NAME);\n\n const ValueTextPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ValueTextPrimitive\n id={valueTextId}\n data-state={state}\n {...valueTextProps}\n style={{\n top: `${arcCenterY}px`,\n ...style,\n }}\n className={cn(\n \"absolute right-0 left-0 flex -translate-y-1/2 items-center justify-center font-semibold text-2xl\",\n className,\n )}\n >\n {children ?? valueText}\n </ValueTextPrimitive>\n );\n}\n\nfunction GaugeLabel(props: DivProps) {\n const { asChild, className, ...labelProps } = props;\n\n const { labelId, state } = useGaugeContext(LABEL_NAME);\n\n const LabelPrimitive = asChild ? Slot : \"div\";\n\n return (\n <LabelPrimitive\n id={labelId}\n data-state={state}\n {...labelProps}\n className={cn(\n \"mt-2 font-medium text-muted-foreground text-sm\",\n className,\n )}\n />\n );\n}\n\nfunction GaugeCombined(props: GaugeProps) {\n return (\n <Gauge {...props}>\n <GaugeIndicator>\n <GaugeTrack />\n <GaugeRange />\n </GaugeIndicator>\n <GaugeValueText />\n </Gauge>\n );\n}\n\nexport {\n Gauge,\n GaugeIndicator,\n GaugeTrack,\n GaugeRange,\n GaugeValueText,\n GaugeLabel,\n GaugeCombined,\n //\n type GaugeProps,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/utils.ts","../../src/radix-vega/hover-card.tsx"],"names":["HoverCardPrimitive"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/radix-vega/hover-card.tsx"],"names":["HoverCardPrimitive"],"mappings":";;;;;;AASO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACNA,SAAS,SAAA,CAAU;AAAA,EACjB,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,2BAAQA,WAAA,CAAmB,IAAA,EAAnB,EAAwB,WAAA,EAAU,YAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AACpE;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,2BACGA,WAAA,CAAmB,OAAA,EAAnB,EAA2B,WAAA,EAAU,oBAAA,EAAsB,GAAG,KAAA,EAAO,CAAA;AAE1E;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,KAAA,GAAQ,QAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACE,GAAA,CAACA,WAAA,CAAmB,MAAA,EAAnB,EAA0B,aAAU,mBAAA,EACnC,QAAA,kBAAA,GAAA;AAAA,IAACA,WAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,2dAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ","file":"hover-card.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merges Tailwind class names, resolving any conflicts.\n *\n * @param inputs - An array of class names to merge.\n * @returns A string of merged and optimized class names.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\"\nimport { HoverCard as HoverCardPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground w-64 rounded-lg p-4 text-sm shadow-md ring-1 duration-100 z-50 origin-(--radix-hover-card-content-transform-origin) outline-hidden\",\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n )\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n"]}
|