Skip to content

Instantly share code, notes, and snippets.

View guiseek's full-sized avatar
🌱
Winners don't care what others think, the real battle is overcoming yourself.

Guilherme Siquinelli guiseek

🌱
Winners don't care what others think, the real battle is overcoming yourself.
View GitHub Profile
@guiseek
guiseek / code.d.ts
Last active July 29, 2023 03:57
Create Nx Monorepo from Figma Figjam
type NxPluginName =
| 'js'
| 'web'
| 'node'
| 'nest'
| 'react'
| 'angular'
| 'express'
type NxProjectType = 'application' | 'library'
@guiseek
guiseek / main.ts
Created July 12, 2023 06:45
WebRTC Local
function create<K extends keyof HTMLElementTagNameMap>(
name: K,
attributes: Partial<HTMLElementTagNameMap[K]>,
...children: Element[]
): HTMLElementTagNameMap[K] {
const el = document.createElement(name)
if (children) el.append(...children)
return Object.assign(el, attributes)
}
@guiseek
guiseek / main.ts
Created June 24, 2023 03:52
Tiny Observer
import {Observer} from './core/event-emitter'
const observer = new Observer<string>()
const sub1$ = observer.subscribe((value, count) => {
console.log('sub 1: ', value, count)
})
const sub2$ = observer.subscribe((value, count) => {
console.log('sub 2: ', value, count)
@guiseek
guiseek / event-emitter.ts
Created June 24, 2023 03:31
Tiny Event Emitter
type Callback<T> = (value: T) => void
export class EventEmitter<T> {
#on = new Set<Callback<T>>([])
set on(cb: Callback<T>) {
this.#on.add(cb)
}
set off(cb: Callback<T>) {
@guiseek
guiseek / main.ts
Created June 17, 2023 05:20
Youtube subtitles to text
const subtitle = segToSub(subtitles.events);
console.log(subtitle);
@guiseek
guiseek / query.ts
Last active June 12, 2023 04:55
HTML & SVG QuerySelector
export function query<K extends keyof SVGElementTagNameMap>(
name: K | `${K}.${string}` | `${K}#${string}` | `${K}[${string}]`,
parent?: Element
): SVGElementTagNameMap[K]
export function query<K extends keyof HTMLElementTagNameMap>(
name: K | `${K}.${string}` | `${K}#${string}` | `${K}[${string}]`,
parent?: Element
): HTMLElementTagNameMap[K]
import './style.scss'
const video = document.querySelector('video') as HTMLVideoElement;
const canvas = document.querySelector('canvas') as HTMLCanvasElement;
const ctx = canvas.getContext('2d', { willReadFrequently: true })!;
// Configuração da tela de fundo
const BACKGROUND_COLOR = [6, 6, 6]; // fundo verde
const TOLERANCE = 80; // tolerância de cor
const OPACITY = 0.7; // opacidade do sujeito
@guiseek
guiseek / handle-state.ts
Created May 12, 2023 02:46
Stte handler
let state: any
function handleState<T = unknown>(data: T) {
state = data
// const events: ((state: T) => void)[] = []
const events = new Set<(state: T | null) => void>()
return {
set(newState: T | null) {
if (newState === null) {
@guiseek
guiseek / define.ts
Created May 12, 2023 02:45
Custom Element @define Decorator
export const noop = () => null
export function pickFn<
T extends CustomElementConstructor,
K extends keyof T = keyof T
>(target: T, key: K) {
return target[key] ?? noop
}
export function define(
@guiseek
guiseek / input.ts
Created April 17, 2023 02:00
Criar formulários com decorators
import 'reflect-metadata'
type InputType =
| 'checkbox'
| 'color'
| 'datetime-local'
| 'email'
| 'file'
| 'image'
| 'month'