atomico
Version:
Atomico is a small library for the creation of interfaces based on web-components, only using functions and hooks.
89 lines (62 loc) • 3.41 kB
Markdown
# Introducción
Atomico es una pequeña libreria de **3KB** para la creacion de interfaces a base de web-components solo usando funciones, virtual-dom y hooks.
## Ejemplo de uso en el navegador
Ver ejemplo en [codepen](https://codepen.io/uppercod/pen/XLqyVO)
```js
import { customElement } from "https://unpkg.com/atomico";
import html from "https://unpkg.com/atomico/html";
function MyTag(props) {
return html`
<h1>
Hi! ${props.value}
</h1>
`;
}
MyTag.props = {
value: { type: String, value: "Atomico" }
};
customElement("my-tag", MyTag);
```
```html
<my-tag></my-tag>
<script type="module" src="./my-custom-tag.js"><script>
```
Y eso es Atomico ¿Fasil no 🤓?, detallemos un poco lo que sucede arriba:
- `customElement`: función que transforma el componente funcional a un elemento html valido.
- `html`: función que mediante template-string crea el virtual-dom, esto es gracias a librería [htm](https://github.com/developit/htm)
- `MyTag`: función que representa el estado del DOM del web-component, cada vez que la propiedad `MyTag.props.value` cambie se generara un nuevo estado del DOM.
- `MyTag.props`: objeto que declara las propiedades y atributos del web-component. [guia de props](props.md)
###### Complicando un poco las cosas
## ShadowDom y StyleSheet
El **ShadowDom** es asombroso, permite encapsular el css asociado al componente, en resumen lo mismo que intenta hacer las librerías css-in-js, pero nativo en el navegador.
**StyleSheet** es una forma optimizada de declarar el css en Atomico, permite el uso de [adoptedStyleSheets](https://developers.google.com/web/updates/2019/02/constructable-stylesheets) solo si el navegador lo soporta, de no soportarlo el css seguirá funcionando pero mediante un tag `<style>`, Si 😎 un pollyfill dentro de los 3kb de Atomico.
**Para habilitar el uso del shadowDom** debe usar el tag `<host/>` para representar el mismo web-component mediante el virtual-dom.
Abrir ejemplo en [codepen](https://codepen.io/uppercod/pen/XWWqNgq)
```js
import { customElement } from "https://unpkg.com/atomico";
import html from "https://unpkg.com/atomico/html";
let stylesheet = `
button {
background: black;
border-radius: 100px;
color: white;
padding: 0.6rem 1rem;
text-transform: uppercase;
border: none;
}
`;
function CustomButton() {
return html`
<host shadowDom styleSheet=${stylesheet}>
<button>my button global</button>
</host>
`;
}
customElement("custom-button", CustomButton);
```
Donde :
- `styleSheet` : CSS a usar por el componente.
- `CustomButton`: función que declara el tag <host/>, note el uso de las propiedades `shadowDom` y `styleSheet` sobre le tag `<host/>` .
**¿Es obligatorio el shadowDom en Atomico?**, no pero es totalmente recomendado si se busca mantener la integridad de la interfaz en un componente
Lo enseñado es solo el comienzo de Atomico, las [props](https://github.com/atomicojs/atomico/blob/master/docs/README-es.md#propiedades-y-atributos-del-web-component) y [hooks](https://github.com/atomicojs/atomico/blob/master/docs/hooks-es.md) son el siguiente nivel de aprendizaje recomendado para ud. Visite el [repositorio en github](https://github.com/atomicojs/atomico/blob/master/docs/README-es.md) para mas contenido.
#### Gracias por leer hasta la ultima línea