Skip to content

Instantly share code, notes, and snippets.

View nova4u's full-sized avatar
🏠
Working from home

Denis Marushchak nova4u

🏠
Working from home
View GitHub Profile
@nova4u
nova4u / what-forces-layout.md
Created October 24, 2025 15:10 — forked from paulirish/what-forces-layout.md
What forces layout/reflow. The comprehensive list.

What forces layout / reflow

All of the below properties or methods, when requested/called in JavaScript, will trigger the browser to synchronously calculate the style and layout*. This is also called reflow or layout thrashing, and is common performance bottleneck.

Generally, all APIs that synchronously provide layout metrics will trigger forced reflow / layout. Read on for additional cases and details.

Element APIs

Getting box metrics
  • elem.offsetLeft, elem.offsetTop, elem.offsetWidth, elem.offsetHeight, elem.offsetParent
@nova4u
nova4u / Gradient.js
Created March 19, 2025 23:52 — forked from jordienr/Gradient.js
Stripe Mesh Gradient WebGL
/*
* Stripe WebGl Gradient Animation
* All Credits to Stripe.com
* ScrollObserver functionality to disable animation when not scrolled into view has been disabled and
* commented out for now.
* https://kevinhufnagl.com
*/
@nova4u
nova4u / settings.json
Created February 17, 2025 22:36 — forked from guilhermerodz/settings.json
Tailwind Styled Utility inspired by styled-components and emotion
// .vscode/settings.json
{
"tailwindCSS.experimental.classRegex": [
["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"],
["cn\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"],
["styled\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"]
],
}
"use client";
import React, { useEffect, useId, useState } from "react";
import { motion, AnimatePresence, MotionConfig } from "framer-motion";
import { PlusIcon, XIcon } from "lucide-react";
import { createPortal } from "react-dom";
import { cn } from "@/lib/utils";
import { buttonVariants } from "../button";
const transition = {
@nova4u
nova4u / runify.js
Created July 19, 2024 13:50 — forked from jherr/runify.js
runify.js
export function runify(obj) {
if(Array.isArray(obj)) {
return obj.map(runify);
} else if(typeof obj === 'object') {
let rune = $state(obj);
let output = {};
for(let key in rune) {
if(typeof obj[key] === 'object') {
obj[key] = runify(obj[key]);
}
@nova4u
nova4u / useUndo.ts
Created February 2, 2024 04:25 — forked from KristofferEriksson/useUndo.ts
A React hook that enhances your components with powerful undo/redo functionality
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;
@nova4u
nova4u / useDynamicTextareaSize.ts
Created February 2, 2024 04:25 — forked from KristofferEriksson/useDynamicTextareaSize.ts
A simple React hook to dynamically adjust the height of a textarea based on its content
/**
* Custom hook for dynamically resizing a textarea to fit its content.
* @param {React.RefObject<HTMLTextAreaElement>} textareaRef - Reference to the textarea element.
* @param {string} textContent - Current text content of the textarea.
* @param {number} maxHeight - Optional: maxHeight of the textarea in pixels.
*/
import { useEffect } from "react";
const useDynamicTextareaSize = (
textareaRef: React.RefObject<HTMLTextAreaElement>,
@nova4u
nova4u / api-route.ts
Created October 7, 2022 04:10
Protect Api Route with Next-Auth and Next.js
import { prisma } from "@lib/prismaClient";
import protectApiRoute from "@lib/protectApiRoute";
import { NextApiRequest, NextApiResponse } from "next";
import { Session } from "next-auth";
export default protectApiRoute(async (req: NextApiRequest, res: NextApiResponse, session: Session) => {
const user = session?.user;
if (user) return res.status(200).json({success: true});
return res.status(401).json('Unauthorized')
@nova4u
nova4u / page.tsx
Created October 7, 2022 04:08
Protect Client route with NextAuth
export const getServerSideProps = protectClientRoute(async () => {
return {
props: {},
};
});