feat: add file upload component with drag-and-drop support
This commit is contained in:
1442
src/ui/components/shadcn/file-upload.tsx
Normal file
1442
src/ui/components/shadcn/file-upload.tsx
Normal file
File diff suppressed because it is too large
Load Diff
14
src/ui/hooks/use-as-ref.ts
Normal file
14
src/ui/hooks/use-as-ref.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { useIsomorphicLayoutEffect } from '@/ui/hooks/use-isomorphic-layout-effect';
|
||||
import * as React from 'react';
|
||||
|
||||
function useAsRef<T>(props: T) {
|
||||
const ref = React.useRef<T>(props);
|
||||
|
||||
useIsomorphicLayoutEffect(() => {
|
||||
ref.current = props;
|
||||
});
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
export { useAsRef };
|
||||
6
src/ui/hooks/use-isomorphic-layout-effect.ts
Normal file
6
src/ui/hooks/use-isomorphic-layout-effect.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import * as React from 'react';
|
||||
|
||||
const useIsomorphicLayoutEffect =
|
||||
typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
|
||||
|
||||
export { useIsomorphicLayoutEffect };
|
||||
13
src/ui/hooks/use-lazy-ref.ts
Normal file
13
src/ui/hooks/use-lazy-ref.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import * as React from 'react';
|
||||
|
||||
function useLazyRef<T>(fn: () => T) {
|
||||
const ref = React.useRef<T | null>(null);
|
||||
|
||||
if (ref.current === null) {
|
||||
ref.current = fn();
|
||||
}
|
||||
|
||||
return ref as React.RefObject<T>;
|
||||
}
|
||||
|
||||
export { useLazyRef };
|
||||
Reference in New Issue
Block a user