UNPKG

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
# 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