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 / deep-value.ts
Last active January 7, 2024 11:37
deep value
export function deepValue<T extends object, P1 extends keyof T>(
value: T,
...path: [P1]
): T[P1];
export function deepValue<
T extends object,
P1 extends keyof T,
P2 extends keyof T[P1]
>(value: T, ...path: [P1, P2]): T[P1][P2];
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@guiseek
guiseek / create.ts
Created December 22, 2023 22:45
create element
export const create = <K extends keyof HTMLElementTagNameMap>(
name: K,
attrs: Partial<HTMLElementTagNameMap[K]> = {},
...children: Element[]
): HTMLElementTagNameMap[K] => {
const el = document.createElement(name);
el.append(...children);
return Object.assign(el, attrs);
};
@guiseek
guiseek / bit.ts
Created December 15, 2023 23:17
Text State
import {determineValue} from './utilities'
import type {Primitive} from './types'
export class Bit<T extends Primitive> extends Text {
constructor(public initialValue: T) {
super(initialValue.toLocaleString())
}
set = (value: T) => {
this.textContent = value.toLocaleString()
import {ElementType, TagsByType} from '../types'
const ns = {
html: 'http://www.w3.org/1999/xhtml',
svg: 'http://www.w3.org/2000/svg',
mathMl: 'http://www.w3.org/1998/Math/MathML',
}
export function createElement<
Type extends ElementType,
@guiseek
guiseek / types.ts
Created December 10, 2023 06:43
HTML, SVG and MathML ElementTagNameMaps
export type HTMLs = HTMLElementTagNameMap
export type SVGs = SVGElementTagNameMap
export type MathMLs = MathMLElementTagNameMap
export type Tags = keyof (HTMLs | SVGs | MathMLs)
export type HTMLByTag<K extends keyof HTMLs> = HTMLs[K]
export type SVGByTag<K extends keyof SVGs> = SVGs[K]
export type MathMLByTag<K extends keyof MathMLs> = MathMLs[K]
@guiseek
guiseek / file-tree.html
Created December 9, 2023 15:32
File Tree
<file-tree class="not-content">
<ul>
<li class="directory" data-filetype="dir">
<details>
<summary>
<span class="tree-entry">
<span class="">
<span>
<span class="sr-only">Directory</span>
<svg
@guiseek
guiseek / extend.ts
Created December 9, 2023 06:46
Custom element extend eecorator
interface CustomConstructor<K extends keyof HTMLElementTagNameMap>
extends CustomElementConstructor {
new (...params: any[]): HTMLElementTagNameMap[K]
prototype: HTMLElementTagNameMap[K]
}
export const extend = <K extends keyof HTMLElementTagNameMap>(inherite: K) => {
return <T extends CustomConstructor<K>>(target: T) => {
customElements.define(`txs-${inherite}`, target, {extends: inherite})
}
@guiseek
guiseek / deep-pick.ts
Created December 6, 2023 16:55
Deep Pick
export const deepPick = <T extends object>(value: T) => {
return <K extends keyof T & string>(path: K) => {
return path.split('.').reduce<T[K]>((prev, curr) => {
return typeof prev[curr] === 'object' ? prev[curr] : prev;
}, value as T[K]);
};
};
export function deep<T extends object>(value: T) {
// prettier-ignore
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + TS</title>
</head>
<body>
<figure id="figure">