import "./App.css"; import { copyToClipboard, genUUID, genRandomStringId, genTimeBasedId, // array uniq, flatten, chunk, groupBy, shuffle, range, // object deepClone, pick, omit, get, // string camelCase, kebabCase, capitalize, truncate, escapeHtml, // number versionCompare, clamp, formatThousands, random, // storage getItem, setItem, removeItem, // format formatFileSize, formatDuration, // function sleep, retry, throttle, memoize, fileDownload, // other dayjs, getDateObject, qs, setWaterMark, } from "@fett/utils"; // @ts-ignore import ReactLogo from "./assets/react.svg?component"; // @ts-ignore import styles from "./index.module.css"; const logGroup = (title: string, fn: () => void) => { console.log(`\n=== ${title} ===`); fn(); }; // Demo card component const Section = ({ title, items }: { title: string; items: [string, string][] }) => (
{title}
{items.map(([label, result], i) => ( {label} {result} ))}
); const App = () => { // Log all new functions to console logGroup("genId", () => { console.log("genUUID:", genUUID()); console.log("genRandomStringId:", genRandomStringId(10)); console.log("genTimeBasedId:", genTimeBasedId(10)); }); logGroup("array", () => { console.log("uniq:", uniq([1, 2, 2, 3])); console.log("flatten:", flatten([1, [2, [3]]], 3)); console.log("chunk:", chunk([1, 2, 3, 4, 5], 2)); console.log("range:", range(0, 10, 2)); console.log("shuffle:", shuffle([1, 2, 3, 4, 5])); console.log( "groupBy:", groupBy( [ { type: "fruit", name: "apple" }, { type: "fruit", name: "banana" }, { type: "veg", name: "carrot" }, ], "type" ) ); }); logGroup("object", () => { const obj = { a: 1, b: { c: 2 } }; const cloned = deepClone(obj); console.log("deepClone (nested same ref?):", cloned.b === obj.b); console.log("pick:", pick({ a: 1, b: 2, c: 3 }, ["a", "c"])); console.log("omit:", omit({ a: 1, b: 2, c: 3 }, ["b"])); console.log("get:", get({ a: { b: { c: 42 } } }, "a.b.c")); }); logGroup("string", () => { console.log("camelCase:", camelCase("foo-bar")); console.log("kebabCase:", kebabCase("fooBar")); console.log("capitalize:", capitalize("hello")); console.log("truncate:", truncate("hello world", 5)); console.log("escapeHtml:", escapeHtml("
")); }); logGroup("number", () => { console.log("versionCompare:", versionCompare("2.1.0", "2.0.5")); console.log("clamp:", clamp(15, 0, 10)); console.log("formatThousands:", formatThousands(1234567)); console.log("random:", random(1, 100)); }); logGroup("storage", () => { setItem("demo", { msg: "hello" }); console.log("getItem:", getItem("demo")); removeItem("demo"); console.log("after remove:", getItem("demo")); }); logGroup("format", () => { console.log("formatFileSize:", formatFileSize(1048576)); console.log("formatDuration:", formatDuration(3661000)); }); logGroup("date", () => { console.log("dayjs:", dayjs().format("YYYY-MM-DD HH:mm:ss")); console.log("getDateObject:", getDateObject()); }); logGroup("url", () => { console.log("qs.parse:", qs.parse("https://example.com?a=1&b=2")); console.log("qs.stringify:", qs.stringify({ x: 1, y: 2 })); console.log("qs.join:", qs.join("https://example.com", { a: "1" })); }); return (

@fett/utils Demo

')", escapeHtml("
")], ]} />
download"], ]} />
); }; export default App;