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 / typed-form.ts
Created September 2, 2023 07:42
Angular Typed Form
type DetectTypedForm<T> =
T extends Array<infer U>
? FormArray<DetectTypedForm<U>>
: T extends Date
? FormControl<Date>
: T extends object
? FormGroup<TypedForm<T>>
: T extends true | false
? FormControl<boolean>
: T extends PropertyKey
@guiseek
guiseek / typed-form-model.ts
Last active August 27, 2023 00:22
Angular Recursive TypedForm
import type {TypedForm} from './typed-form'
type TypedFormModel<T> = {
// Verifique cada tipo do model
[K in keyof T]: TypedForm<T[K]>
}
export type {TypedFormModel}
type DOMEventMapDefinitions = [
[HTMLElement, HTMLElementEventMap],
[Document, DocumentEventMap],
[Window, WindowEventMap],
[FileReader, FileReaderEventMap],
[Element, ElementEventMap],
[Animation, AnimationEventMap],
[EventSource, EventSourceEventMap],
[AbortSignal, AbortSignalEventMap],
[AbstractWorker, AbstractWorkerEventMap],
@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