@docyrus/shadcn 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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 +1561 -57
- package/dist/index.js +23035 -2534
- 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 +40 -7
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React__default, { DragEvent, ChangeEvent, InputHTMLAttributes } from 'react';
|
|
2
|
+
|
|
3
|
+
type FileMetadata = {
|
|
4
|
+
name: string;
|
|
5
|
+
size: number;
|
|
6
|
+
type: string;
|
|
7
|
+
url: string;
|
|
8
|
+
id: string;
|
|
9
|
+
};
|
|
10
|
+
type FileWithPreview = {
|
|
11
|
+
file: File | FileMetadata;
|
|
12
|
+
id: string;
|
|
13
|
+
preview?: string;
|
|
14
|
+
};
|
|
15
|
+
type FileUploadOptions = {
|
|
16
|
+
maxFiles?: number;
|
|
17
|
+
maxSize?: number;
|
|
18
|
+
accept?: string;
|
|
19
|
+
multiple?: boolean;
|
|
20
|
+
initialFiles?: FileMetadata[];
|
|
21
|
+
onFilesChange?: (files: FileWithPreview[]) => void;
|
|
22
|
+
onFilesAdded?: (addedFiles: FileWithPreview[]) => void;
|
|
23
|
+
onError?: (errors: string[]) => void;
|
|
24
|
+
};
|
|
25
|
+
type FileUploadState = {
|
|
26
|
+
files: FileWithPreview[];
|
|
27
|
+
isDragging: boolean;
|
|
28
|
+
errors: string[];
|
|
29
|
+
};
|
|
30
|
+
type FileUploadActions = {
|
|
31
|
+
addFiles: (files: FileList | File[]) => void;
|
|
32
|
+
removeFile: (id: string) => void;
|
|
33
|
+
clearFiles: () => void;
|
|
34
|
+
clearErrors: () => void;
|
|
35
|
+
handleDragEnter: (e: DragEvent<HTMLElement>) => void;
|
|
36
|
+
handleDragLeave: (e: DragEvent<HTMLElement>) => void;
|
|
37
|
+
handleDragOver: (e: DragEvent<HTMLElement>) => void;
|
|
38
|
+
handleDrop: (e: DragEvent<HTMLElement>) => void;
|
|
39
|
+
handleFileChange: (e: ChangeEvent<HTMLInputElement>) => void;
|
|
40
|
+
openFileDialog: () => void;
|
|
41
|
+
getInputProps: (props?: InputHTMLAttributes<HTMLInputElement>) => InputHTMLAttributes<HTMLInputElement> & {
|
|
42
|
+
ref: React__default.Ref<HTMLInputElement>;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
declare const useFileUpload: (options?: FileUploadOptions) => [FileUploadState, FileUploadActions];
|
|
46
|
+
declare const formatBytes: (bytes: number, decimals?: number) => string;
|
|
47
|
+
|
|
48
|
+
export { type FileMetadata, type FileUploadActions, type FileUploadOptions, type FileUploadState, type FileWithPreview, formatBytes, useFileUpload };
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { useState, useRef, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
var useFileUpload = (options = {}) => {
|
|
4
|
+
const {
|
|
5
|
+
maxFiles = Number.POSITIVE_INFINITY,
|
|
6
|
+
maxSize = Number.POSITIVE_INFINITY,
|
|
7
|
+
accept = "*",
|
|
8
|
+
multiple = false,
|
|
9
|
+
initialFiles = [],
|
|
10
|
+
onFilesChange,
|
|
11
|
+
onFilesAdded,
|
|
12
|
+
onError
|
|
13
|
+
} = options;
|
|
14
|
+
const [state, setState] = useState({
|
|
15
|
+
files: initialFiles.map((file) => ({
|
|
16
|
+
file,
|
|
17
|
+
id: file.id,
|
|
18
|
+
preview: file.url
|
|
19
|
+
})),
|
|
20
|
+
isDragging: false,
|
|
21
|
+
errors: []
|
|
22
|
+
});
|
|
23
|
+
const inputRef = useRef(null);
|
|
24
|
+
const validateFile = useCallback(
|
|
25
|
+
(file) => {
|
|
26
|
+
if (file instanceof File) {
|
|
27
|
+
if (file.size > maxSize) {
|
|
28
|
+
return `File "${file.name}" exceeds the maximum size of ${formatBytes(maxSize)}.`;
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
if (file.size > maxSize) {
|
|
32
|
+
return `File "${file.name}" exceeds the maximum size of ${formatBytes(maxSize)}.`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (accept !== "*") {
|
|
36
|
+
const acceptedTypes = accept.split(",").map((type) => type.trim());
|
|
37
|
+
const fileType = file instanceof File ? file.type || "" : file.type;
|
|
38
|
+
const fileExtension = `.${file instanceof File ? file.name.split(".").pop() : file.name.split(".").pop()}`;
|
|
39
|
+
const isAccepted = acceptedTypes.some((type) => {
|
|
40
|
+
if (type.startsWith(".")) {
|
|
41
|
+
return fileExtension.toLowerCase() === type.toLowerCase();
|
|
42
|
+
}
|
|
43
|
+
if (type.endsWith("/*")) {
|
|
44
|
+
const baseType = type.split("/")[0];
|
|
45
|
+
return fileType.startsWith(`${baseType}/`);
|
|
46
|
+
}
|
|
47
|
+
return fileType === type;
|
|
48
|
+
});
|
|
49
|
+
if (!isAccepted) {
|
|
50
|
+
return `File "${file instanceof File ? file.name : file.name}" is not an accepted file type.`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
},
|
|
55
|
+
[accept, maxSize]
|
|
56
|
+
);
|
|
57
|
+
const createPreview = useCallback((file) => {
|
|
58
|
+
if (file instanceof File) {
|
|
59
|
+
return URL.createObjectURL(file);
|
|
60
|
+
}
|
|
61
|
+
return file.url;
|
|
62
|
+
}, []);
|
|
63
|
+
const generateUniqueId = useCallback((file) => {
|
|
64
|
+
if (file instanceof File) {
|
|
65
|
+
return `${file.name}-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
|
|
66
|
+
}
|
|
67
|
+
return file.id;
|
|
68
|
+
}, []);
|
|
69
|
+
const clearFiles = useCallback(() => {
|
|
70
|
+
setState((prev) => {
|
|
71
|
+
for (const file of prev.files) {
|
|
72
|
+
if (file.preview && file.file instanceof File && file.file.type.startsWith("image/")) {
|
|
73
|
+
URL.revokeObjectURL(file.preview);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (inputRef.current) {
|
|
77
|
+
inputRef.current.value = "";
|
|
78
|
+
}
|
|
79
|
+
const newState = {
|
|
80
|
+
...prev,
|
|
81
|
+
files: [],
|
|
82
|
+
errors: []
|
|
83
|
+
};
|
|
84
|
+
onFilesChange?.(newState.files);
|
|
85
|
+
return newState;
|
|
86
|
+
});
|
|
87
|
+
}, [onFilesChange]);
|
|
88
|
+
const addFiles = useCallback(
|
|
89
|
+
(newFiles) => {
|
|
90
|
+
if (!newFiles || newFiles.length === 0) return;
|
|
91
|
+
const newFilesArray = Array.from(newFiles);
|
|
92
|
+
const errors = [];
|
|
93
|
+
setState((prev) => ({ ...prev, errors: [] }));
|
|
94
|
+
if (!multiple) {
|
|
95
|
+
clearFiles();
|
|
96
|
+
}
|
|
97
|
+
if (multiple && maxFiles !== Number.POSITIVE_INFINITY && state.files.length + newFilesArray.length > maxFiles) {
|
|
98
|
+
errors.push(`You can only upload a maximum of ${maxFiles} files.`);
|
|
99
|
+
onError?.(errors);
|
|
100
|
+
setState((prev) => ({ ...prev, errors }));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const validFiles = [];
|
|
104
|
+
for (const file of newFilesArray) {
|
|
105
|
+
if (multiple) {
|
|
106
|
+
const isDuplicate = state.files.some(
|
|
107
|
+
(existingFile) => existingFile.file.name === file.name && existingFile.file.size === file.size
|
|
108
|
+
);
|
|
109
|
+
if (isDuplicate) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (file.size > maxSize) {
|
|
114
|
+
errors.push(
|
|
115
|
+
multiple ? `Some files exceed the maximum size of ${formatBytes(maxSize)}.` : `File exceeds the maximum size of ${formatBytes(maxSize)}.`
|
|
116
|
+
);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const error = validateFile(file);
|
|
120
|
+
if (error) {
|
|
121
|
+
errors.push(error);
|
|
122
|
+
} else {
|
|
123
|
+
validFiles.push({
|
|
124
|
+
file,
|
|
125
|
+
id: generateUniqueId(file),
|
|
126
|
+
preview: createPreview(file)
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (validFiles.length > 0) {
|
|
131
|
+
onFilesAdded?.(validFiles);
|
|
132
|
+
setState((prev) => {
|
|
133
|
+
const newFiles2 = !multiple ? validFiles : [...prev.files, ...validFiles];
|
|
134
|
+
onFilesChange?.(newFiles2);
|
|
135
|
+
return {
|
|
136
|
+
...prev,
|
|
137
|
+
files: newFiles2,
|
|
138
|
+
errors
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
} else if (errors.length > 0) {
|
|
142
|
+
onError?.(errors);
|
|
143
|
+
setState((prev) => ({
|
|
144
|
+
...prev,
|
|
145
|
+
errors
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
if (inputRef.current) {
|
|
149
|
+
inputRef.current.value = "";
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
[
|
|
153
|
+
state.files,
|
|
154
|
+
maxFiles,
|
|
155
|
+
multiple,
|
|
156
|
+
maxSize,
|
|
157
|
+
validateFile,
|
|
158
|
+
createPreview,
|
|
159
|
+
generateUniqueId,
|
|
160
|
+
clearFiles,
|
|
161
|
+
onFilesChange,
|
|
162
|
+
onFilesAdded
|
|
163
|
+
]
|
|
164
|
+
);
|
|
165
|
+
const removeFile = useCallback(
|
|
166
|
+
(id) => {
|
|
167
|
+
setState((prev) => {
|
|
168
|
+
const fileToRemove = prev.files.find((file) => file.id === id);
|
|
169
|
+
if (fileToRemove && fileToRemove.preview && fileToRemove.file instanceof File && fileToRemove.file.type.startsWith("image/")) {
|
|
170
|
+
URL.revokeObjectURL(fileToRemove.preview);
|
|
171
|
+
}
|
|
172
|
+
const newFiles = prev.files.filter((file) => file.id !== id);
|
|
173
|
+
onFilesChange?.(newFiles);
|
|
174
|
+
return {
|
|
175
|
+
...prev,
|
|
176
|
+
files: newFiles,
|
|
177
|
+
errors: []
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
},
|
|
181
|
+
[onFilesChange]
|
|
182
|
+
);
|
|
183
|
+
const clearErrors = useCallback(() => {
|
|
184
|
+
setState((prev) => ({
|
|
185
|
+
...prev,
|
|
186
|
+
errors: []
|
|
187
|
+
}));
|
|
188
|
+
}, []);
|
|
189
|
+
const handleDragEnter = useCallback((e) => {
|
|
190
|
+
e.preventDefault();
|
|
191
|
+
e.stopPropagation();
|
|
192
|
+
setState((prev) => ({ ...prev, isDragging: true }));
|
|
193
|
+
}, []);
|
|
194
|
+
const handleDragLeave = useCallback((e) => {
|
|
195
|
+
e.preventDefault();
|
|
196
|
+
e.stopPropagation();
|
|
197
|
+
if (e.currentTarget.contains(e.relatedTarget)) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
setState((prev) => ({ ...prev, isDragging: false }));
|
|
201
|
+
}, []);
|
|
202
|
+
const handleDragOver = useCallback((e) => {
|
|
203
|
+
e.preventDefault();
|
|
204
|
+
e.stopPropagation();
|
|
205
|
+
}, []);
|
|
206
|
+
const handleDrop = useCallback(
|
|
207
|
+
(e) => {
|
|
208
|
+
e.preventDefault();
|
|
209
|
+
e.stopPropagation();
|
|
210
|
+
setState((prev) => ({ ...prev, isDragging: false }));
|
|
211
|
+
if (inputRef.current?.disabled) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
|
|
215
|
+
if (!multiple) {
|
|
216
|
+
const file = e.dataTransfer.files[0];
|
|
217
|
+
addFiles([file]);
|
|
218
|
+
} else {
|
|
219
|
+
addFiles(e.dataTransfer.files);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
[addFiles, multiple]
|
|
224
|
+
);
|
|
225
|
+
const handleFileChange = useCallback(
|
|
226
|
+
(e) => {
|
|
227
|
+
if (e.target.files && e.target.files.length > 0) {
|
|
228
|
+
addFiles(e.target.files);
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
[addFiles]
|
|
232
|
+
);
|
|
233
|
+
const openFileDialog = useCallback(() => {
|
|
234
|
+
if (inputRef.current) {
|
|
235
|
+
inputRef.current.click();
|
|
236
|
+
}
|
|
237
|
+
}, []);
|
|
238
|
+
const getInputProps = useCallback(
|
|
239
|
+
(props = {}) => {
|
|
240
|
+
return {
|
|
241
|
+
...props,
|
|
242
|
+
type: "file",
|
|
243
|
+
onChange: handleFileChange,
|
|
244
|
+
accept: props.accept || accept,
|
|
245
|
+
multiple: props.multiple !== void 0 ? props.multiple : multiple,
|
|
246
|
+
ref: inputRef
|
|
247
|
+
};
|
|
248
|
+
},
|
|
249
|
+
[accept, multiple, handleFileChange]
|
|
250
|
+
);
|
|
251
|
+
return [
|
|
252
|
+
state,
|
|
253
|
+
{
|
|
254
|
+
addFiles,
|
|
255
|
+
removeFile,
|
|
256
|
+
clearFiles,
|
|
257
|
+
clearErrors,
|
|
258
|
+
handleDragEnter,
|
|
259
|
+
handleDragLeave,
|
|
260
|
+
handleDragOver,
|
|
261
|
+
handleDrop,
|
|
262
|
+
handleFileChange,
|
|
263
|
+
openFileDialog,
|
|
264
|
+
getInputProps
|
|
265
|
+
}
|
|
266
|
+
];
|
|
267
|
+
};
|
|
268
|
+
var formatBytes = (bytes, decimals = 2) => {
|
|
269
|
+
if (bytes === 0) return "0 Bytes";
|
|
270
|
+
const k = 1024;
|
|
271
|
+
const dm = decimals < 0 ? 0 : decimals;
|
|
272
|
+
const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
|
|
273
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
274
|
+
return Number.parseFloat((bytes / k ** i).toFixed(dm)) + sizes[i];
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
export { formatBytes, useFileUpload };
|
|
278
|
+
//# sourceMappingURL=use-file-upload.js.map
|
|
279
|
+
//# sourceMappingURL=use-file-upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-file-upload.ts"],"names":["newFiles"],"mappings":"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","file":"use-file-upload.js","sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { useCallback, useRef, useState, type ChangeEvent, type DragEvent, type InputHTMLAttributes } from 'react';\n\nexport type FileMetadata = {\n name: string;\n size: number;\n type: string;\n url: string;\n id: string;\n};\n\nexport type FileWithPreview = {\n file: File | FileMetadata;\n id: string;\n preview?: string;\n};\n\nexport type FileUploadOptions = {\n maxFiles?: number; // Only used when multiple is true, defaults to Infinity\n maxSize?: number; // in bytes\n accept?: string;\n multiple?: boolean; // Defaults to false\n initialFiles?: FileMetadata[];\n onFilesChange?: (files: FileWithPreview[]) => void; // Callback when files change\n onFilesAdded?: (addedFiles: FileWithPreview[]) => void; // Callback when new files are added\n onError?: (errors: string[]) => void;\n};\n\nexport type FileUploadState = {\n files: FileWithPreview[];\n isDragging: boolean;\n errors: string[];\n};\n\nexport type FileUploadActions = {\n addFiles: (files: FileList | File[]) => void;\n removeFile: (id: string) => void;\n clearFiles: () => void;\n clearErrors: () => void;\n handleDragEnter: (e: DragEvent<HTMLElement>) => void;\n handleDragLeave: (e: DragEvent<HTMLElement>) => void;\n handleDragOver: (e: DragEvent<HTMLElement>) => void;\n handleDrop: (e: DragEvent<HTMLElement>) => void;\n handleFileChange: (e: ChangeEvent<HTMLInputElement>) => void;\n openFileDialog: () => void;\n getInputProps: (props?: InputHTMLAttributes<HTMLInputElement>) => InputHTMLAttributes<HTMLInputElement> & {\n ref: React.Ref<HTMLInputElement>;\n };\n};\n\nexport const useFileUpload = (options: FileUploadOptions = {}): [FileUploadState, FileUploadActions] => {\n const {\n maxFiles = Number.POSITIVE_INFINITY,\n maxSize = Number.POSITIVE_INFINITY,\n accept = '*',\n multiple = false,\n initialFiles = [],\n onFilesChange,\n onFilesAdded,\n onError,\n } = options;\n\n const [state, setState] = useState<FileUploadState>({\n files: initialFiles.map((file) => ({\n file,\n id: file.id,\n preview: file.url,\n })),\n isDragging: false,\n errors: [],\n });\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const validateFile = useCallback(\n (file: File | FileMetadata): string | null => {\n if (file instanceof File) {\n if (file.size > maxSize) {\n return `File \"${file.name}\" exceeds the maximum size of ${formatBytes(maxSize)}.`;\n }\n } else {\n if (file.size > maxSize) {\n return `File \"${file.name}\" exceeds the maximum size of ${formatBytes(maxSize)}.`;\n }\n }\n\n if (accept !== '*') {\n const acceptedTypes = accept.split(',').map((type) => type.trim());\n const fileType = file instanceof File ? file.type || '' : file.type;\n const fileExtension = `.${file instanceof File ? file.name.split('.').pop() : file.name.split('.').pop()}`;\n\n const isAccepted = acceptedTypes.some((type) => {\n if (type.startsWith('.')) {\n return fileExtension.toLowerCase() === type.toLowerCase();\n }\n if (type.endsWith('/*')) {\n const baseType = type.split('/')[0];\n return fileType.startsWith(`${baseType}/`);\n }\n return fileType === type;\n });\n\n if (!isAccepted) {\n return `File \"${file instanceof File ? file.name : file.name}\" is not an accepted file type.`;\n }\n }\n\n return null;\n },\n [accept, maxSize],\n );\n\n const createPreview = useCallback((file: File | FileMetadata): string | undefined => {\n if (file instanceof File) {\n return URL.createObjectURL(file);\n }\n return file.url;\n }, []);\n\n const generateUniqueId = useCallback((file: File | FileMetadata): string => {\n if (file instanceof File) {\n return `${file.name}-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n }\n return file.id;\n }, []);\n\n const clearFiles = useCallback(() => {\n setState((prev) => {\n // Clean up object URLs\n for (const file of prev.files) {\n if (file.preview && file.file instanceof File && file.file.type.startsWith('image/')) {\n URL.revokeObjectURL(file.preview);\n }\n }\n\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n\n const newState = {\n ...prev,\n files: [],\n errors: [],\n };\n\n onFilesChange?.(newState.files);\n return newState;\n });\n }, [onFilesChange]);\n\n const addFiles = useCallback(\n (newFiles: FileList | File[]) => {\n if (!newFiles || newFiles.length === 0) return;\n\n const newFilesArray = Array.from(newFiles);\n const errors: string[] = [];\n\n // Clear existing errors when new files are uploaded\n setState((prev) => ({ ...prev, errors: [] }));\n\n // In single file mode, clear existing files first\n if (!multiple) {\n clearFiles();\n }\n\n // Check if adding these files would exceed maxFiles (only in multiple mode)\n if (multiple && maxFiles !== Number.POSITIVE_INFINITY && state.files.length + newFilesArray.length > maxFiles) {\n errors.push(`You can only upload a maximum of ${maxFiles} files.`);\n onError?.(errors);\n setState((prev) => ({ ...prev, errors }));\n return;\n }\n\n const validFiles: FileWithPreview[] = [];\n\n for (const file of newFilesArray) {\n // Only check for duplicates if multiple files are allowed\n if (multiple) {\n const isDuplicate = state.files.some(\n (existingFile) => existingFile.file.name === file.name && existingFile.file.size === file.size,\n );\n\n // Skip duplicate files silently\n if (isDuplicate) {\n return;\n }\n }\n\n // Check file size\n if (file.size > maxSize) {\n errors.push(\n multiple\n ? `Some files exceed the maximum size of ${formatBytes(maxSize)}.`\n : `File exceeds the maximum size of ${formatBytes(maxSize)}.`,\n );\n continue;\n }\n\n const error = validateFile(file);\n if (error) {\n errors.push(error);\n } else {\n validFiles.push({\n file,\n id: generateUniqueId(file),\n preview: createPreview(file),\n });\n }\n }\n\n // Only update state if we have valid files to add\n if (validFiles.length > 0) {\n // Call the onFilesAdded callback with the newly added valid files\n onFilesAdded?.(validFiles);\n\n setState((prev) => {\n const newFiles = !multiple ? validFiles : [...prev.files, ...validFiles];\n onFilesChange?.(newFiles);\n return {\n ...prev,\n files: newFiles,\n errors,\n };\n });\n } else if (errors.length > 0) {\n onError?.(errors);\n setState((prev) => ({\n ...prev,\n errors,\n }));\n }\n\n // Reset input value after handling files\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n },\n [\n state.files,\n maxFiles,\n multiple,\n maxSize,\n validateFile,\n createPreview,\n generateUniqueId,\n clearFiles,\n onFilesChange,\n onFilesAdded,\n ],\n );\n\n const removeFile = useCallback(\n (id: string) => {\n setState((prev) => {\n const fileToRemove = prev.files.find((file) => file.id === id);\n if (\n fileToRemove &&\n fileToRemove.preview &&\n fileToRemove.file instanceof File &&\n fileToRemove.file.type.startsWith('image/')\n ) {\n URL.revokeObjectURL(fileToRemove.preview);\n }\n\n const newFiles = prev.files.filter((file) => file.id !== id);\n onFilesChange?.(newFiles);\n\n return {\n ...prev,\n files: newFiles,\n errors: [],\n };\n });\n },\n [onFilesChange],\n );\n\n const clearErrors = useCallback(() => {\n setState((prev) => ({\n ...prev,\n errors: [],\n }));\n }, []);\n\n const handleDragEnter = useCallback((e: DragEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setState((prev) => ({ ...prev, isDragging: true }));\n }, []);\n\n const handleDragLeave = useCallback((e: DragEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (e.currentTarget.contains(e.relatedTarget as Node)) {\n return;\n }\n\n setState((prev) => ({ ...prev, isDragging: false }));\n }, []);\n\n const handleDragOver = useCallback((e: DragEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setState((prev) => ({ ...prev, isDragging: false }));\n\n // Don't process files if the input is disabled\n if (inputRef.current?.disabled) {\n return;\n }\n\n if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n // In single file mode, only use the first file\n if (!multiple) {\n const file = e.dataTransfer.files[0];\n addFiles([file]);\n } else {\n addFiles(e.dataTransfer.files);\n }\n }\n },\n [addFiles, multiple],\n );\n\n const handleFileChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files.length > 0) {\n addFiles(e.target.files);\n }\n },\n [addFiles],\n );\n\n const openFileDialog = useCallback(() => {\n if (inputRef.current) {\n inputRef.current.click();\n }\n }, []);\n\n const getInputProps = useCallback(\n (props: InputHTMLAttributes<HTMLInputElement> = {}) => {\n return {\n ...props,\n type: 'file' as const,\n onChange: handleFileChange,\n accept: props.accept || accept,\n multiple: props.multiple !== undefined ? props.multiple : multiple,\n ref: inputRef,\n };\n },\n [accept, multiple, handleFileChange],\n );\n\n return [\n state,\n {\n addFiles,\n removeFile,\n clearFiles,\n clearErrors,\n handleDragEnter,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n handleFileChange,\n openFileDialog,\n getInputProps,\n },\n ];\n};\n\n// Helper function to format bytes to human-readable format\nexport const formatBytes = (bytes: number, decimals = 2): string => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return Number.parseFloat((bytes / k ** i).toFixed(dm)) + sizes[i];\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
// src/hooks/use-isomorphic-layout-effect.ts
|
|
4
|
+
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React.useLayoutEffect : React.useEffect;
|
|
5
|
+
|
|
6
|
+
export { useIsomorphicLayoutEffect };
|
|
7
|
+
//# sourceMappingURL=use-isomorphic-layout-effect.js.map
|
|
8
|
+
//# sourceMappingURL=use-isomorphic-layout-effect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-isomorphic-layout-effect.ts"],"names":[],"mappings":";;;AAEA,IAAM,yBAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GAAoB,KAAA,CAAA,eAAA,GAAwB,KAAA,CAAA","file":"use-isomorphic-layout-effect.js","sourcesContent":["import * as React from \"react\";\n\nconst useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n\nexport { useIsomorphicLayoutEffect };\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
// src/hooks/use-lazy-ref.ts
|
|
4
|
+
function useLazyRef(fn) {
|
|
5
|
+
const ref = React.useRef(null);
|
|
6
|
+
if (ref.current === null) {
|
|
7
|
+
ref.current = fn();
|
|
8
|
+
}
|
|
9
|
+
return ref;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { useLazyRef };
|
|
13
|
+
//# sourceMappingURL=use-lazy-ref.js.map
|
|
14
|
+
//# sourceMappingURL=use-lazy-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-lazy-ref.ts"],"names":[],"mappings":";;;AAEA,SAAS,WAAc,EAAA,EAAa;AAClC,EAAA,MAAM,GAAA,GAAY,aAAiB,IAAI,CAAA;AAEvC,EAAA,IAAI,GAAA,CAAI,YAAY,IAAA,EAAM;AACxB,IAAA,GAAA,CAAI,UAAU,EAAA,EAAG;AAAA,EACnB;AAEA,EAAA,OAAO,GAAA;AACT","file":"use-lazy-ref.js","sourcesContent":["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"]}
|
package/dist/hooks/use-mobile.js
CHANGED
|
@@ -2,17 +2,19 @@ import * as React from 'react';
|
|
|
2
2
|
|
|
3
3
|
// src/hooks/use-mobile.ts
|
|
4
4
|
var MOBILE_BREAKPOINT = 768;
|
|
5
|
-
function useIsMobile() {
|
|
6
|
-
const [isMobile, setIsMobile] = React.useState(
|
|
5
|
+
function useIsMobile(breakpoint = MOBILE_BREAKPOINT) {
|
|
6
|
+
const [isMobile, setIsMobile] = React.useState(
|
|
7
|
+
void 0
|
|
8
|
+
);
|
|
7
9
|
React.useEffect(() => {
|
|
8
|
-
const mql = window.matchMedia(`(max-width: ${
|
|
10
|
+
const mql = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);
|
|
9
11
|
const onChange = () => {
|
|
10
|
-
setIsMobile(window.innerWidth <
|
|
12
|
+
setIsMobile(window.innerWidth < breakpoint);
|
|
11
13
|
};
|
|
12
14
|
mql.addEventListener("change", onChange);
|
|
13
|
-
setIsMobile(window.innerWidth <
|
|
15
|
+
setIsMobile(window.innerWidth < breakpoint);
|
|
14
16
|
return () => mql.removeEventListener("change", onChange);
|
|
15
|
-
}, []);
|
|
17
|
+
}, [breakpoint]);
|
|
16
18
|
return !!isMobile;
|
|
17
19
|
}
|
|
18
20
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/use-mobile.ts"],"names":[],"mappings":";;;AAEA,IAAM,iBAAA,GAAoB,GAAA;
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-mobile.ts"],"names":[],"mappings":";;;AAEA,IAAM,iBAAA,GAAoB,GAAA;AAE1B,SAAS,WAAA,CAAY,aAAa,iBAAA,EAAmB;AACnD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAU,KAAA,CAAA,QAAA;AAAA,IACpC;AAAA,GACF;AAEA,EAAM,gBAAU,MAAM;AACpB,IAAA,MAAM,MAAM,MAAA,CAAO,UAAA,CAAW,CAAA,YAAA,EAAe,UAAA,GAAa,CAAC,CAAA,GAAA,CAAK,CAAA;AAChE,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,WAAA,CAAY,MAAA,CAAO,aAAa,UAAU,CAAA;AAAA,IAC5C,CAAA;AACA,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AACvC,IAAA,WAAA,CAAY,MAAA,CAAO,aAAa,UAAU,CAAA;AAC1C,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzD,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,OAAO,CAAC,CAAC,QAAA;AACX","file":"use-mobile.js","sourcesContent":["import * as React from \"react\";\r\n\r\nconst MOBILE_BREAKPOINT = 768;\r\n\r\nfunction useIsMobile(breakpoint = MOBILE_BREAKPOINT) {\r\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\r\n undefined,\r\n );\r\n\r\n React.useEffect(() => {\r\n const mql = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);\r\n const onChange = () => {\r\n setIsMobile(window.innerWidth < breakpoint);\r\n };\r\n mql.addEventListener(\"change\", onChange);\r\n setIsMobile(window.innerWidth < breakpoint);\r\n return () => mql.removeEventListener(\"change\", onChange);\r\n }, [breakpoint]);\r\n\r\n return !!isMobile;\r\n}\r\n\r\nexport { useIsMobile };\r\n"]}
|