This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { useCallback, useEffect, useRef, useState } from "react"; | |
interface UseUndoHook<T> { | |
value: T; | |
onChange: (newValue: T) => void; | |
undo: () => void; | |
redo: () => void; | |
clear: () => void; | |
canUndo: boolean; | |
canRedo: boolean; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use client"; | |
import { | |
Dialog, | |
DialogContent, | |
DialogTitle, | |
DialogTrigger | |
} from "@/components/ui/dialog"; | |
import useDragDrop from "@/hooks/useDragDrop"; | |
import { cn, formatBytes } from "@/lib/utils"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import * as React from 'react'; | |
import { DateTime } from 'luxon'; | |
import { Calendar as CalendarIcon } from 'lucide-react'; | |
import { Button } from '@/components/ui/Button'; | |
import { Calendar } from '@/components/ui/Calendar'; | |
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover'; | |
import { cn } from '@/lib/utils'; | |
import { SelectSingleEventHandler } from 'react-day-picker'; | |
import { Label } from '@/components/ui/Label'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Note: this gist is a part of this OSS project that I'm currently working on: https://github.com/steven-tey/dub | |
export default async function getTitleFromUrl (url: string) { | |
const controller = new AbortController(); | |
const timeoutId = setTimeout(() => controller.abort(), 2000); // timeout if it takes longer than 2 seconds | |
const title = await fetch(url, { signal: controller.signal }) | |
.then((res) => { | |
clearTimeout(timeoutId); | |
return res.text(); | |
}) |