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
const canvas = canvasRef.current; | |
const pixelRatio = window.devicePixelRatio || 1; | |
const rect = canvas.getBoundingClientRect(); | |
canvas.style.width = rect.width + 'px'; | |
canvas.style.height = rect.height + 'px'; | |
canvas.width = rect.width * pixelRatio; | |
canvas.height = rect.height * pixelRatio; |
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
const search = (nums, target) => { | |
let start = 0; | |
let end = nums.length - 1; | |
while (start <= end) { | |
let mid = Math.floor((end + start) / 2); | |
if (nums[mid] === target) { | |
return mid; | |
} |
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
const getDispatcher = () => { | |
return (React as any).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher.current; | |
}; | |
const setDispatcher = (w: any) => { | |
(React as any).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher.current = w; | |
}; | |
const useForceUpdate = ([v, setv] = useState(false)) => |
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
[ | |
{"url":"https://feeds.megaphone.fm/newheights"}, | |
{"url":"https://vas3k.club/posts.rss"}, | |
{"url":"https://feeds.feedburner.com/abseilio"}, | |
{"url":"https://www.astronet.ru/db/rss.xml"}, | |
{"url":"https://ciechanow.ski/atom.xml"}, | |
{"url":"http://ithare.com/feed/"}, | |
{"url":"https://xkcd.com/rss.xml"}, | |
{"url":"https://nuancesprog.ru/feed/"}, | |
{"url":"https://tproger.ru/feed"}, |
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 React from 'react'; | |
import { Relative, Absolute, Clickable } from '../components/atoms'; | |
const DropContext = React.createContext(null); | |
const useDrop = () => React.useContext(DropContext); | |
// If you don't want some kind of effect | |
// to depend on a callback but wnat the | |
// freshest version of a callback to be | |
// available, this one is fo you |
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
export type Image = HTMLImageElement; | |
const loadImage = async (url: string) => new Promise<Image>((resolve, reject) => { | |
const img = new Image(); | |
img.onload = () => resolve(img); | |
img.onerror = (e) => reject(e); | |
img.src = url; | |
}); |
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
const observable = (predicate) => (listener) => predicate(listener); | |
const pipe = (obs) => (...operators) => operators.reduce((acc, op) => op(acc), obs); | |
const map = (mapper) => (obs) => observable((resolve) => obs((data) => resolve(mapper(data)))); | |
const mergeMap = (mapper) => (obs) => observable((resolve) => obs((data) => mapper(data)(resolve))) | |
const filter = (predicate) => (obs) => observable((resolve) => obs((data) => predicate(data) && resolve(data))); | |
// { |
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
// tsconfig | |
{ | |
"compilerOptions": { | |
"esModuleInterop": true, | |
"allowSyntheticDefaultImports": true, | |
"baseUrl": "./src", | |
"outDir": "./dist", | |
"sourceMap": true, | |
"declaration": false, |
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 React from 'react'; | |
import styled, { css } from 'styled-components'; | |
type PropsOf<T> = T extends React.FC<infer P> ? P : never; | |
export type BaseProps = { | |
p?: string; | |
pt?: string; | |
pl?: string; | |
pr?: string; |
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
const extractParams = (after: string) => { | |
if (!after.startsWith('(')) { | |
return [after, {}]; | |
} | |
const paramsEnd = after.indexOf(')'); | |
return [ | |
after.slice(paramsEnd + 1), | |
Object.fromEntries( |
NewerOlder