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
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">
@guiseek
guiseek / slugify.util.ts
Created September 9, 2023 09:49
Slugify
export const slugify = (...args: (string | number)[]): string => {
const value = args.join(' ');
return value
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, '')
.toLowerCase()
.trim()
.replace(/[^a-z0-9 ]/g, '')
.replace(/\s+/g, '-');