<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Franco Andrés</title>
    <description>The latest articles on Forem by Franco Andrés (@franqsanz).</description>
    <link>https://forem.com/franqsanz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F364850%2F3088bb42-8c5b-4c2a-a345-d548cc48c473.jpg</url>
      <title>Forem: Franco Andrés</title>
      <link>https://forem.com/franqsanz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/franqsanz"/>
    <language>en</language>
    <item>
      <title>I created a plugin that simplifies the integration of Google Maps into Vite and React</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Wed, 25 Mar 2026 23:19:52 +0000</pubDate>
      <link>https://forem.com/franqsanz/i-created-a-plugin-that-simplifies-the-integration-of-google-maps-into-vite-and-react-1c1l</link>
      <guid>https://forem.com/franqsanz/i-created-a-plugin-that-simplifies-the-integration-of-google-maps-into-vite-and-react-1c1l</guid>
      <description>&lt;p&gt;If you're using Vite and React, you've probably dealt with manually loading the Google Maps JavaScript API, wrapping your app with providers, repeated configuration and boilerplate all over your codebase. That's where &lt;code&gt;vite-plugin-google-maps&lt;/code&gt; comes in: a plugin designed to simplify and speed up Google Maps integration in Vite-based React apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does &lt;code&gt;vite-plugin-google-maps&lt;/code&gt; offer?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Auto-configuration and zero boilerplate:&lt;/strong&gt; the plugin automatically wraps your app with the necessary provider (APIProvider) — you don't have to do it manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-configured Map component:&lt;/strong&gt; exposes a virtual module &lt;code&gt;@google-maps/map&lt;/code&gt; that provides a &lt;code&gt;Map&lt;/code&gt; component ready to use, with default props you can override whenever you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Globally configurable defaults:&lt;/strong&gt; from the initial zoom and center, to controls (fullscreen, zoom control, etc.), to how gestures behave on the map.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Maps libraries support (places, marker, etc.):&lt;/strong&gt; you can define which libraries to load alongside the plugin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development panel (debug):&lt;/strong&gt; if you enable &lt;code&gt;debug: true&lt;/code&gt;, you can see useful information like map load status, zoom level, cursor position, and click coordinates — handy for debugging and development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibility:&lt;/strong&gt; you can use the &lt;code&gt;Map&lt;/code&gt; component's props to override defaults for specific maps, which is ideal if your app uses multiple maps with different configurations.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get started
&lt;/h2&gt;

&lt;p&gt;Install the plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm &lt;span class="nb"&gt;install &lt;/span&gt;vite-plugin-google-maps
&lt;span class="c"&gt;# or npm/yarn equivalent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure it in &lt;code&gt;vite.config.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;react&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@vitejs/plugin-react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;GoogleMapsPlugin&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite-plugin-google-maps&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;react&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="nc"&gt;GoogleMapsPlugin&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_GOOGLE_MAPS_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;libraries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;places&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;marker&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;       &lt;span class="c1"&gt;// for example&lt;/span&gt;
      &lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                           &lt;span class="c1"&gt;// optional&lt;/span&gt;
      &lt;span class="na"&gt;mapDefaults&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;mapId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_MAP_ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;gestureHandling&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;greedy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;defaultCenter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;40.7128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;74.0060&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;defaultZoom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;fullscreenControl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;disableDefaultUI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="c1"&gt;// other controls like zoomControl, streetViewControl, etc.&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the &lt;code&gt;Map&lt;/code&gt; component in your React app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@google-maps/map&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AdvancedMarker&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@vis.gl/react-google-maps&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;100vh&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;100%&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AdvancedMarker&lt;/span&gt; &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;40.7128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;74.0060&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can override props on &lt;code&gt;Map&lt;/code&gt; to change the global configuration (zoom, center, controls, etc.) for that specific map only.&lt;/p&gt;

&lt;h2&gt;
  
  
  TypeScript Setup
&lt;/h2&gt;

&lt;p&gt;Since &lt;code&gt;@google-maps/map&lt;/code&gt; is a virtual module generated by the plugin, TypeScript doesn't know about it by default. To get full typing and autocomplete for the &lt;code&gt;Map&lt;/code&gt; component's props, you need to declare the module in a type declaration file. Create a &lt;code&gt;types.d.ts&lt;/code&gt; (or add it to your &lt;code&gt;vite-env.d.ts&lt;/code&gt;) with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// types.d.ts or vite-env.d.ts&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kr"&gt;module&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@google-maps/map&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;GoogleMapBase&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@vis.gl/react-google-maps&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ComponentProps&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;GoogleMapBase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this, the &lt;code&gt;Map&lt;/code&gt; component will have the same typed props as the original &lt;code&gt;Map&lt;/code&gt; from &lt;code&gt;@vis.gl/react-google-maps&lt;/code&gt;, with no TypeScript errors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built this plugin
&lt;/h2&gt;

&lt;p&gt;Integrating Google Maps into a React + Vite project usually involves a lot of boilerplate: provider setup, configuration, libraries, conditional loading — I felt there was room for an abstraction that simplifies all of that.&lt;/p&gt;

&lt;p&gt;I wanted to deliver a smooth integration experience, without repeating configuration every time I use a map, especially in projects with multiple maps.&lt;/p&gt;

&lt;p&gt;I wanted the default configuration to be sane but easily overridable: many apps just need a basic map, others need different maps — the plugin works for both cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is it ideal for?
&lt;/h2&gt;

&lt;p&gt;New projects using Vite + React that need maps: lets you get started with Google Maps in minutes without any hassle.&lt;/p&gt;

&lt;p&gt;Apps with multiple maps or different map configurations: you can set global defaults and override them when needed.&lt;/p&gt;

&lt;p&gt;Teams looking to avoid repeated boilerplate, simplifying onboarding for new developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things to keep in mind / Limitations
&lt;/h2&gt;

&lt;p&gt;You need a Google Maps &lt;code&gt;API Key&lt;/code&gt; like any integration with the official API. The plugin doesn't handle key generation for you — that's part of the standard Google Cloud Platform flow.&lt;/p&gt;

&lt;p&gt;The plugin depends on &lt;code&gt;@vis.gl/react-google-maps&lt;/code&gt; — if your stack changes, some adjustments may be needed.&lt;/p&gt;

&lt;p&gt;It's experimental: while functional, there may be edge cases or specific situations where manual configuration makes more sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;vite-plugin-google-maps&lt;/code&gt; was built to give back time and simplicity: instead of repeating configuration and wrappers every time you need a map, just install the plugin, configure it once, and use the &lt;code&gt;Map&lt;/code&gt; component directly. If you're using Vite + React and need Google Maps, it can help you get started quickly, keep your code clean, and focus on what matters.&lt;/p&gt;

&lt;p&gt;If you're a web developer and this interests you, I'd love to hear your feedback, improvement ideas, or use cases where it becomes indispensable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Franqsanz/vite-plugin-google-maps" rel="noopener noreferrer"&gt;vite-plugin-google-maps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://visgl.github.io/react-google-maps/" rel="noopener noreferrer"&gt;@vis.gl/react-google-maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>typescript</category>
      <category>vite</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Creé un plugin que simplifica la integración de Google Maps en Vite y React</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Thu, 26 Feb 2026 15:37:47 +0000</pubDate>
      <link>https://forem.com/franqsanz/cree-un-plugin-que-simplifica-la-integracion-de-google-maps-en-vite-y-react-11k9</link>
      <guid>https://forem.com/franqsanz/cree-un-plugin-que-simplifica-la-integracion-de-google-maps-en-vite-y-react-11k9</guid>
      <description>&lt;p&gt;Si estás usando Vite y React, probablemente hayas lidiado con la carga manual del API de Google Maps JavaScript API, el wrapping con providers, configuración repetida y boilerplate dentro de tu aplicación. Ahí es donde entra &lt;code&gt;vite-plugin-google-maps&lt;/code&gt;: un plugin pensado para simplificar y acelerar la integración de Google Maps en apps React basadas en Vite.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué ofrece &lt;a href="https://www.npmjs.com/package/vite-plugin-google-maps" rel="noopener noreferrer"&gt;&lt;code&gt;vite-plugin-google-maps&lt;/code&gt;&lt;/a&gt;?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Auto-configuración y cero boilerplate:&lt;/strong&gt; el plugin autoenvuelve tu app con el provider necesario (APIProvider) no tenés que hacerlo manualmente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Componente Map preconfigurado:&lt;/strong&gt; expone un módulo virtual &lt;code&gt;@google-maps/map&lt;/code&gt; que provee un componente &lt;code&gt;Map&lt;/code&gt; listo para usar, con props por defecto que podés sobrescribir cuando lo necesites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defaults globales configurables:&lt;/strong&gt; desde el zoom inicial, centro, controles (fullscreen, zoom control, etc.), hasta cómo responden los gestos en el mapa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Soporte para librerías de Google Maps (places, marker, etc.):&lt;/strong&gt; podés definir qué "libraries" cargar junto con el plugin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Panel de desarrollo (debug):&lt;/strong&gt; si activás debug: true, podés ver información útil, como estado de carga de mapa, nivel de zoom, posición del cursor, coordenadas de click útil para debugging y desarrollo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibilidad:&lt;/strong&gt; porque podés utilizar las props del componente &lt;code&gt;Map&lt;/code&gt; para sobreescribir defaults en ciertos mapas, lo que es ideal si tu app usa múltiples mapas con diferentes configuraciones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo ponerlo en marcha
&lt;/h2&gt;

&lt;p&gt;Instalar el plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm &lt;span class="nb"&gt;install &lt;/span&gt;vite-plugin-google-maps
&lt;span class="c"&gt;# o npm/yarn equivalente&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configurarlo en &lt;code&gt;vite.config.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;react&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@vitejs/plugin-react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;GoogleMapsPlugin&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite-plugin-google-maps&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;react&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="nc"&gt;GoogleMapsPlugin&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;TU_GOOGLE_MAPS_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;libraries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;places&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;marker&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;       &lt;span class="c1"&gt;// por ejemplo&lt;/span&gt;
      &lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                           &lt;span class="c1"&gt;// opcional&lt;/span&gt;
      &lt;span class="na"&gt;mapDefaults&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;mapId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;TU_MAP_ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;gestureHandling&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;greedy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;defaultCenter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;40.7128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;74.0060&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;defaultZoom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;fullscreenControl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;disableDefaultUI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="c1"&gt;// y otros controles como zoomControl, streetViewControl, etc.&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usar el componente &lt;code&gt;Map&lt;/code&gt; en tu app React:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@google-maps/map&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AdvancedMarker&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@vis.gl/react-google-maps&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;100vh&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;100%&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AdvancedMarker&lt;/span&gt; &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;40.7128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;74.0060&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si querés, podés sobrescribir props en &lt;code&gt;Map&lt;/code&gt; para modificar configuración global (zoom, centro, controles, etc.) sólo para ese mapa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup con TypeScript
&lt;/h2&gt;

&lt;p&gt;Como &lt;code&gt;@google-maps/map&lt;/code&gt; es un módulo virtual generado por el plugin, TypeScript no lo conoce por defecto. Para tener tipado completo y autocompletado en las props del componente &lt;code&gt;Map&lt;/code&gt;, necesitás declarar el módulo en un archivo de tipos. Creá un &lt;code&gt;types.d.ts&lt;/code&gt; (o agregalo a tu &lt;code&gt;vite-env.d.ts&lt;/code&gt;) con lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// types.d.ts o vite-env.d.ts&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kr"&gt;module&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@google-maps/map&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;GoogleMapBase&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@vis.gl/react-google-maps&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ComponentProps&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;GoogleMapBase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto, el componente &lt;code&gt;Map&lt;/code&gt; va a tener las mismas props tipadas que el &lt;code&gt;Map&lt;/code&gt; original de &lt;code&gt;@vis.gl/react-google-maps&lt;/code&gt;, sin errores de TypeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué desarrollé este plugin?
&lt;/h2&gt;

&lt;p&gt;Integrar Google Maps en un proyecto React + Vite suele implicar bastante boilerplate: provider, configuración, librerías, carga condicional; me pareció que había lugar para una abstracción que lo simplifique.&lt;/p&gt;

&lt;p&gt;Quería entregar una experiencia de integración fluida, sin repetición de configuración cada vez que uso un mapa, especialmente en proyectos con múltiples mapas.&lt;/p&gt;

&lt;p&gt;Quiero que la configuración por defecto sea sana, pero fácilmente sobreescribible: muchas apps sólo necesitan un mapa básico, otras necesitan distintos mapas el plugin sirve para ambos casos.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Para quién es ideal?
&lt;/h2&gt;

&lt;p&gt;Proyectos nuevos usando Vite + React que necesiten mapas: permite empezar con Google Maps en unos minutos sin complicaciones.&lt;/p&gt;

&lt;p&gt;Apps con múltiples mapas o diferentes configuraciones de mapas: podes establecer defaults globales y sobreescribir cuando sea necesario.&lt;/p&gt;

&lt;p&gt;Equipos que buscan evitar boilerplate repetido, simplificando onboarding de nuevos desarrolladores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cosas a tener en cuenta / Limitaciones
&lt;/h2&gt;

&lt;p&gt;Necesitás una &lt;code&gt;API Key&lt;/code&gt; de Google Maps como cualquier integración del API oficial. El plugin no gestiona la generación de la &lt;code&gt;API key&lt;/code&gt; por vos. Esto es parte del flujo estándar de la Google Cloud Platform.&lt;/p&gt;

&lt;p&gt;El plugin depende de la librería &lt;code&gt;@vis.gl/react-google-maps&lt;/code&gt; si tu stack cambia, podría requerir ajustes.&lt;/p&gt;

&lt;p&gt;Es experimental: aunque ya funcional, puede haber edge-cases o situaciones particulares donde convenga revisar configuración manual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;vite-plugin-google-maps&lt;/code&gt; nació para devolvernos tiempo y simplicidad: en lugar de repetir configuración y wrappers cada vez que queremos un mapa, basta con instalar el plugin, configurarlo una vez y usar el componente Map directamente. Si usás Vite + React y necesitás Google Maps, puede ayudarte a arrancar rápido, mantener tu código limpio y enfocarte en lo importante.&lt;/p&gt;

&lt;p&gt;Si te interesa y para vos que ya sos desarrollador web me encantaría saber tu feedback, ideas de mejoras o casos de uso donde se vuelva indispensable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relacionado
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Franqsanz/vite-plugin-google-maps" rel="noopener noreferrer"&gt;vite-plugin-google-maps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://visgl.github.io/react-google-maps/" rel="noopener noreferrer"&gt;@vis.gl/react-google-maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>vite</category>
      <category>typescript</category>
      <category>react</category>
    </item>
    <item>
      <title>Mini project for converting files to Byte Array</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Thu, 06 Mar 2025 21:00:02 +0000</pubDate>
      <link>https://forem.com/franqsanz/mini-project-for-converting-files-to-byte-array-3lc9</link>
      <guid>https://forem.com/franqsanz/mini-project-for-converting-files-to-byte-array-3lc9</guid>
      <description>&lt;p&gt;Quick weekend project, I created a converter to pass images, PDF, GIF, and Word to a Bytes Array, since I didn't find a site that does it the way I wanted. &lt;/p&gt;

&lt;p&gt;Fully developed with vanilla JavaScript, HTML and pure CSS.&lt;/p&gt;

&lt;p&gt;Page: &lt;a href="https://files-to-byte-array.vercel.app/" rel="noopener noreferrer"&gt;https://files-to-byte-array.vercel.app/&lt;/a&gt;&lt;br&gt;
Repo: &lt;a href="https://github.com/Franqsanz/files-to-byte-array" rel="noopener noreferrer"&gt;https://github.com/Franqsanz/files-to-byte-array&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuu40qajkh1212mbv5q64.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuu40qajkh1212mbv5q64.jpg" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>html</category>
    </item>
    <item>
      <title>Herramienta como extensión del navegador para observar los atributos ARIA</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Fri, 15 Oct 2021 14:53:13 +0000</pubDate>
      <link>https://forem.com/franqsanz/herramienta-como-extension-del-navegador-para-observar-los-atributos-aria-jnl</link>
      <guid>https://forem.com/franqsanz/herramienta-como-extension-del-navegador-para-observar-los-atributos-aria-jnl</guid>
      <description>&lt;p&gt;&lt;em&gt;Foto de portada por &lt;a href="https://unsplash.com/photos/KBPzLjwdFbI" rel="noopener noreferrer"&gt;Tito Pixel&lt;/a&gt; en Unsplash&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Estos últimos meses he estado tratando de mejorar una extensión que desarrollé el año pasado, la idea es que puedas observar si las etiquetas HTML contienen estos atributos. &lt;/p&gt;

&lt;p&gt;Escribí sobre está extensión hace un tiempo aquí en Dev, puedes leerlo en el siguiente enlace:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/franqsanz" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F364850%2F3088bb42-8c5b-4c2a-a345-d548cc48c473.jpg" alt="franqsanz"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/franqsanz/una-extension-para-detectar-los-aria-label-no-aplicados-en-etiquetas-html-4p9p" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Una extensión para detectar los "aria-label" no aplicados en etiquetas HTML.&lt;/h2&gt;
      &lt;h3&gt;Franco Andrés ・ Oct 28 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#html&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#a11y&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  ¿Qué hay de nuevo?
&lt;/h2&gt;

&lt;p&gt;Mi objetivo era que está misma pudiera inyectar un código CSS mediante programación no como estaba originalmente, así tendría más control de ella y podría activarla cuando quería desde una UI (User Interface), también decidí renombrar el proyecto a "&lt;strong&gt;ARIA Observation Tool&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkr3knpgfg6ypmvfcb4fz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkr3knpgfg6ypmvfcb4fz.png" alt="UI Aria Observation Tool" width="361" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué se observa?
&lt;/h2&gt;

&lt;p&gt;Por el momento no se observan todos los atributos ARIA solo los siguientes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aria-label&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aria-expanded&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aria-hidden&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aria-haspopup&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si no están aplicados serán remarcados con un color en los bordes.&lt;br&gt;
En realidad es un &lt;code&gt;outline&lt;/code&gt; de 2px de tipo dashed.&lt;/p&gt;

&lt;p&gt;Ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnxg5j8dhb5phpfxxgf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnxg5j8dhb5phpfxxgf6.png" alt="Ejemplo" width="574" height="87"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;La verdad que no tengo mucha experiencia en extensiones y me ha costado entender al principio en cómo inyectar tal código (aún sigo sin entender muchas cosas 🙃)&lt;/p&gt;

&lt;p&gt;Después de leer varios artículos sobre cómo crear una extensión y estar en la documentación oficial de &lt;a href="https://developer.chrome.com/docs/extensions/" rel="noopener noreferrer"&gt;Google&lt;/a&gt;, logré hacer lo que quería! 🥳 &lt;/p&gt;
&lt;h2&gt;
  
  
  En construcción...
&lt;/h2&gt;

&lt;p&gt;Aún no he logrado terminarla, sigo luchando pero ya es un paso más, eso me hace sentir bien y la verdad que este proyecto me da orgullo. &lt;br&gt;
No sé bien si realmente es útil o no, pero siempre aprendes algo nuevo en cada proyecto.&lt;/p&gt;
&lt;h2&gt;
  
  
  Problemas descubiertos
&lt;/h2&gt;

&lt;p&gt;He descubierto muchos problemas cada vez que he avanzado, la accesibilidad es compleja y usar estos atributos también, no se trata simplemente de colocarlos en todas partes, hay etiquetas HTML que no es necesario colocar los atributos y en otros si.&lt;br&gt;
Esto me llevo a la conclusión de que es bastante complejo desarrollar está herramienta.&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Queda mucho por investigar y aprender sobre los atributos ARIA y cuáles son las etiquetas más importantes que deberían contenerlos.&lt;/p&gt;
&lt;h2&gt;
  
  
  Repo:
&lt;/h2&gt;

&lt;p&gt;Dejo el repositorio por si tienes curiosidad o si deseas contribuir o dejar una estrella! 😊&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Franqsanz" rel="noopener noreferrer"&gt;
        Franqsanz
      &lt;/a&gt; / &lt;a href="https://github.com/Franqsanz/aria-observation-tool" rel="noopener noreferrer"&gt;
        aria-observation-tool
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🧐 Tool as a browser extension to observe whether ARIA attributes are applied in HTML tags.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;ARIA Observation Tool Extension&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Franqsanz/aria-observation-tool/./icons/1.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FFranqsanz%2Faria-observation-tool%2F.%2Ficons%2F1.png" alt="preview"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Está herramienta sirve para observar algunos atributos ARIA.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aria-label&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aria-expanded&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aria-haspopup&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aria-hidden&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si no están aplicados serán remarcados con un color en los bordes.&lt;/p&gt;
&lt;p&gt;Ejemplo:
&lt;a rel="noopener noreferrer" href="https://github.com/Franqsanz/aria-observation-tool/./icons/2.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FFranqsanz%2Faria-observation-tool%2F.%2Ficons%2F2.png" alt="preview"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Franqsanz/aria-observation-tool" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  Recursos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/web/fundamentals/accessibility/semantics-aria?hl=es" rel="noopener noreferrer"&gt;Introducción a ARIA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/web/fundamentals/accessibility/semantics-aria/aria-labels-and-relationships?hl=es" rel="noopener noreferrer"&gt;Etiquetas y relaciones de ARIA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.w3.org/TR/html-aria/#sec-strong-native-semantics" rel="noopener noreferrer"&gt;AREA in HTML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.w3.org/TR/using-aria/" rel="noopener noreferrer"&gt;Using ARIA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;¡Saludos y Feliz Codificación!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>a11y</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Mis Repos para Hacktoberfest 🎃</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Wed, 06 Oct 2021 13:39:20 +0000</pubDate>
      <link>https://forem.com/franqsanz/mis-repos-para-hacktoberfest-3cfo</link>
      <guid>https://forem.com/franqsanz/mis-repos-para-hacktoberfest-3cfo</guid>
      <description>&lt;p&gt;¡Hola! &lt;/p&gt;

&lt;p&gt;Este año es mi primera vez que participo en el Hacktoberfest y quiero dejar algunos de mis proyectos por si alguien desea contribuir. &lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Fruits API
&lt;/h2&gt;

&lt;p&gt;Una API con datos de árboles frutales.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stack:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Franqsanz" rel="noopener noreferrer"&gt;
        Franqsanz
      &lt;/a&gt; / &lt;a href="https://github.com/Franqsanz/fruits-api" rel="noopener noreferrer"&gt;
        fruits-api
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🍉 🍎  A GraphQL API with fruit tree data. Built with 🚀 Apollo Server Lambda + Netlify Lambda.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Fruits API&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a href="https://open.vscode.dev/Franqsanz/fruits-api" rel="nofollow noopener noreferrer"&gt;
    &lt;img alt="Open in Visual Studio Code" src="https://camo.githubusercontent.com/f8b75c59f1305a9c0087e3137c1b831a5e1cd04c341a9f314efb98ff51d2378b/68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f6c6f676f3d76697375616c73747564696f636f6465266c6162656c3d266d6573736167653d4f70656e253230696e25323056697375616c25323053747564696f253230436f6465266c6162656c436f6c6f723d32633263333226636f6c6f723d303037616363266c6f676f436f6c6f723d303037616363"&gt;
  &lt;/a&gt;
  &lt;a href="https://app.netlify.com/sites/fruits-api/deploys" rel="nofollow noopener noreferrer"&gt;
    &lt;img alt="Netlify Status" src="https://camo.githubusercontent.com/0de40e845bcb179837a86a84ccf95fe1a7ad96519bbdf931799185999c0caa7e/68747470733a2f2f6170692e6e65746c6966792e636f6d2f6170692f76312f6261646765732f64616262366530372d313463322d343061662d626639362d3263316130306634336663392f6465706c6f792d737461747573"&gt;
  &lt;/a&gt;
  &lt;a href="https://github.com/Franqsanz/fruits-api/actions" rel="noopener noreferrer"&gt;
    &lt;img alt="License" src="https://github.com/Franqsanz/fruits-api/workflows/Tests/badge.svg"&gt;
  &lt;/a&gt;
  &lt;a href="https://github.com/Franqsanz/fruits-api/LICENSE" rel="noopener noreferrer"&gt;
    &lt;img alt="License" src="https://camo.githubusercontent.com/074b89bca64d3edc93a1db6c7e3b1636b874540ba91d66367c0e5e354c56d0ea/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e737667"&gt;
  &lt;/a&gt;
  &lt;a href="http://makeapullrequest.com" rel="nofollow noopener noreferrer"&gt;
    &lt;img alt="GitHub Pull Requests" src="https://camo.githubusercontent.com/8044932e4d65e1fbb9c1a6748c252052df35e41ac18b4a6548aba1ce19a72a40/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d627269676874677265656e"&gt;
  &lt;/a&gt;
  &lt;a href="https://github.com/Franqsanz/fruits-api/graphs/contributors" rel="noopener noreferrer"&gt;
    &lt;img alt="GitHub contributors" src="https://camo.githubusercontent.com/3901af220567dd6f5b7e536416838086b680ef2cea0f63974ea4bed553b7b7cf/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f4672616e7173616e7a2f6672756974732d617069"&gt;
  &lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a8a6219cf0313b681948382bcbcc27a34ae00572d463437bd92ebb1df58647c9/68747470733a2f2f6261646765732e66726170736f66742e636f6d2f6f732f76312f6f70656e2d736f757263652e7376673f763d313033"&gt;&lt;img alt="Open Source Love" src="https://camo.githubusercontent.com/a8a6219cf0313b681948382bcbcc27a34ae00572d463437bd92ebb1df58647c9/68747470733a2f2f6261646765732e66726170736f66742e636f6d2f6f732f76312f6f70656e2d736f757263652e7376673f763d313033"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/Franqsanz/fruits-api/fork" rel="noopener noreferrer"&gt;
    &lt;img alt="made-with-javascript" src="https://camo.githubusercontent.com/2ab576f15702a6cda14c9f4494c437d0f392fdb35a25930b81ea4874d30922b0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d616465253230776974682d4a6176615363726970742d3166343235662e7376673f6c6f676f3d6a61766173637269707426636f6c6f723d666663373030"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Other Language&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://github.com/Franqsanz/fruits-api/readme_es.md" rel="noopener noreferrer"&gt;Spanish / Español&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;GraphQL API with fruit tree data
This API is built with Apollo Server Lambda + Netlify Lambda.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In this project I am not using a database.
The data is in &lt;a href="https://github.com/Franqsanz/fruits-api/./src/data/data.js" rel="noopener noreferrer"&gt;data.js&lt;/a&gt;, in case you want to add more information :)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contribute&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Read the &lt;a href="https://github.com/Franqsanz/fruits-api/CONTRIBUTING_eng.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt; file or check if there are any &lt;a href="https://github.com/Franqsanz/fruits-api/issues" rel="noopener noreferrer"&gt;issues&lt;/a&gt;, all PRs are welcome.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;URLs&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Playground:&lt;/strong&gt; &lt;a href="https://fruits-api.netlify.app/graphql" rel="nofollow noopener noreferrer"&gt;https://fruits-api.netlify.app/graphql&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web:&lt;/strong&gt; &lt;a href="https://fruit-api.netlify.app/" rel="nofollow noopener noreferrer"&gt;https://fruit-api.netlify.app/&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Get the code for this project&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Clone repository:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone https://github.com/Franqsanz/fruits-api.git&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Enter to the repository directory:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c1"&gt;cd&lt;/span&gt; fruits-api&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Install all dependencies:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Or with yarn&lt;/span&gt;
yarn&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Once all the dependencies are installed run the following command:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm start

yarn start&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;Run Testing (optional):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm &lt;span class="pl-c1"&gt;test&lt;/span&gt;

yarn &lt;span class="pl-c1"&gt;test&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;As an alternative, you can use Docker&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open your terminal/command line&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;docker-compose up&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once the API is executed, if all goes well you should see in your terminal the following…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Franqsanz/fruits-api" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  2️⃣ BoxShadows.css
&lt;/h2&gt;

&lt;p&gt;Una mini librería CSS de sombras.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stack:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Franqsanz" rel="noopener noreferrer"&gt;
        Franqsanz
      &lt;/a&gt; / &lt;a href="https://github.com/Franqsanz/box-shadows.css" rel="noopener noreferrer"&gt;
        box-shadows.css
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Mini librería de sombras.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://github.com/Franqsanz/box-shadows.css/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667" alt="GitHub License"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;BoxShadows.css&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Franqsanz/box-shadows.css/./img/img.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FFranqsanz%2Fbox-shadows.css%2F.%2Fimg%2Fimg.png" alt="header"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mini librería &lt;code&gt;CSS&lt;/code&gt; de sombras.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Instalación&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm i box-shadows&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;O descarga el archivo desde la web: &lt;a href="https://cssshadows.netlify.app/" rel="nofollow noopener noreferrer"&gt;https://cssshadows.netlify.app/&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Modo de uso&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;1. Ejemplo con Styled Components:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s1"&gt;styled&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;"styled-components"&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-s1"&gt;sw_b_20_b&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;"box-shadows"&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-v"&gt;Card&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;styled&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;div&lt;/span&gt;&lt;span class="pl-s"&gt;`&lt;/span&gt;
&lt;span class="pl-s"&gt;  width: 200px;&lt;/span&gt;
&lt;span class="pl-s"&gt;  height: 200px;&lt;/span&gt;
&lt;span class="pl-s"&gt;  box-shadow: &lt;span class="pl-s1"&gt;&lt;span class="pl-kos"&gt;${&lt;/span&gt;&lt;span class="pl-s1"&gt;sw_b_20_b&lt;/span&gt;&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;/span&gt;;&lt;/span&gt;
&lt;span class="pl-s"&gt;`&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2. De forma tradicional:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La forma de utilizar esta librería es como cualquier archivo &lt;code&gt;CSS&lt;/code&gt;. Solo debes enlazarlo en el &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;div class="highlight highlight-text-html-basic notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-kos"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;head&lt;/span&gt;&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="pl-kos"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;link&lt;/span&gt; &lt;span class="pl-c1"&gt;rel&lt;/span&gt;="&lt;span class="pl-s"&gt;stylesheet&lt;/span&gt;" &lt;span class="pl-c1"&gt;href&lt;/span&gt;="&lt;span class="pl-s"&gt;./shadows.min.css&lt;/span&gt;"&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="pl-kos"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="pl-ent"&gt;head&lt;/span&gt;&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;❗ ATENCIÓN ❗&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Solo hay &lt;strong&gt;clases&lt;/strong&gt; no puedes usar &lt;code&gt;id&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Entonces debes llamar los &lt;code&gt;class&lt;/code&gt; desde las etiquetas que utilizes.
Por ejemplo un &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Color de la sombra&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;#CACACA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rgb(202, 202, 202)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hsl(0, 0%, 79%)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Tipos de clases disponibles&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Clases con efecto &lt;code&gt;Blur&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clases con efecto &lt;code&gt;Solid&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clases con…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Franqsanz/box-shadows.css" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  3️⃣ Regexs
&lt;/h2&gt;

&lt;p&gt;Un pequeño paquete NPM de expresiones regulares.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stack:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Franqsanz" rel="noopener noreferrer"&gt;
        Franqsanz
      &lt;/a&gt; / &lt;a href="https://github.com/Franqsanz/regexs" rel="noopener noreferrer"&gt;
        regexs
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Paquete NPM de expresiones regulares.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://github.com/Franqsanz/regexs/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667" alt="GitHub License"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Franqsanz/regexs/" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dd0b24c1e6776719edb2c273548a510d6490d8d25269a043dfabbd38419905da/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d627269676874677265656e2e737667" alt="PRs welcome"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/130580d663911aae8e1b73badfc7b2593ff18b027cc5999845034dcbc9bf622e/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f726567657873"&gt;&lt;img src="https://camo.githubusercontent.com/130580d663911aae8e1b73badfc7b2593ff18b027cc5999845034dcbc9bf622e/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f726567657873" alt="npm"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ba92c849bec0db3198ff4b651b5626ed03c2568adf75bc00e1f9b12377a2c079/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f64742f726567657873"&gt;&lt;img src="https://camo.githubusercontent.com/ba92c849bec0db3198ff4b651b5626ed03c2568adf75bc00e1f9b12377a2c079/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f64742f726567657873" alt="npm"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Regexs&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Es un paquete de Expresiones Regulares, que construí con el objetivo de uso personal, pero cualquiera puede utilizarlo.&lt;/p&gt;
&lt;p&gt;Voy a ir recopilando Expresiones Regulares con el tiempo.&lt;/p&gt;
&lt;p&gt;Si te gustaría contribuir para agregar algunas más, puedes hacer un PR. en &lt;a href="https://github.com/Franqsanz/regexs" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. :)&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Instalación&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;$ npm install regexs&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Modo de uso&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;regexs&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;require&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'regexs'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-c"&gt;// También pudes utilizar "Destructured Object"&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; numberCommas&lt;span class="pl-kos"&gt;,&lt;/span&gt; rmAccents &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;require&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'regexs'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-c"&gt;// O con import&lt;/span&gt;
&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s1"&gt;regexs&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;'regexs'&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-s1"&gt;numberCommas&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s1"&gt;rmAccents&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;'regexs'&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-c"&gt;// Agregar comas a cifras numéricas.&lt;/span&gt;
&lt;span class="pl-c"&gt;// Por ejemplo:&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;numero&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;numberCommas&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-c1"&gt;50000&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-smi"&gt;console&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;log&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;numero&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt; &lt;span class="pl-c"&gt;// 50,000&lt;/span&gt;

&lt;span class="pl-c"&gt;// Quitar acentos.&lt;/span&gt;
&lt;span class="pl-c"&gt;// Por ejemplo:&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;acentos&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;rmAccents&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'perfección'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-smi"&gt;console&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;log&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;acentos&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt; &lt;span class="pl-c"&gt;// perfeccion&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Tipos de expresiones regulares disponibles:&lt;/h4&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Franqsanz/regexs" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Happy Coding!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>hacktoberfest</category>
      <category>github</category>
      <category>contributorswanted</category>
    </item>
    <item>
      <title>Resolviendo el error de degit en la instalación de create-astro</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Mon, 30 Aug 2021 19:00:55 +0000</pubDate>
      <link>https://forem.com/franqsanz/resolviendo-el-error-de-degit-en-la-instalacion-de-create-astro-3koa</link>
      <guid>https://forem.com/franqsanz/resolviendo-el-error-de-degit-en-la-instalacion-de-create-astro-3koa</guid>
      <description>&lt;p&gt;Si algún día pruebas &lt;a href="https://astro.build/" rel="noopener noreferrer"&gt;Astro&lt;/a&gt; es posible que tengas el siguiente error en la instalación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;franqsanz@Franco/mnt/c/Users/franc/Desktop/random-books npm init astro
npx: installed 18 &lt;span class="k"&gt;in &lt;/span&gt;10.622s

Welcome to Astro! &lt;span class="o"&gt;(&lt;/span&gt;create-astro v0.6.0&lt;span class="o"&gt;)&lt;/span&gt;
If you encounter a problem, visit https://github.com/snowpackjs/astro/issues to search or file a new issue.

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Prepare &lt;span class="k"&gt;for &lt;/span&gt;liftoff.
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Gathering mission details...
✔ Which app template would you like to use? › Starter Kit &lt;span class="o"&gt;(&lt;/span&gt;Generic&lt;span class="o"&gt;)&lt;/span&gt;
✔ Which frameworks would you like to use? › Preact, React, Solid, Svelte, Vue
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Copying project files...
zlib: unexpected end of file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zlib: unexpected end of file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si es que todavía no fue resuelto por el equipo de Astro (es muy probable que esté resuelto en el futuro).&lt;/p&gt;

&lt;h2&gt;
  
  
  Solución
&lt;/h2&gt;

&lt;p&gt;Sólo debes eliminar la carpeta &lt;code&gt;.degit&lt;/code&gt; de la siguiente forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.degit/github/snowpackjs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y luego volver a probar la instalación y esto es todo!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;degit&lt;/code&gt; es lento en &lt;code&gt;create-astro&lt;/code&gt;, así que debes tener paciencia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/snowpackjs/astro/issues/655" rel="noopener noreferrer"&gt;Aquí un hilo en github sobre el problema&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Saludos!&lt;/p&gt;

</description>
      <category>astro</category>
      <category>javascript</category>
      <category>bash</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Cómo cambiar la contraseña de Linux(Ubuntu 20.04 LTS) en WSL</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Tue, 20 Jul 2021 18:42:53 +0000</pubDate>
      <link>https://forem.com/franqsanz/como-cambiar-la-contrasena-de-linux-ubuntu-20-04-lts-en-wsl-17he</link>
      <guid>https://forem.com/franqsanz/como-cambiar-la-contrasena-de-linux-ubuntu-20-04-lts-en-wsl-17he</guid>
      <description>&lt;p&gt;Seguramente alguna vez te has olvidado la contraseña en Linux y no sabes cómo cambiarla (cosa que a mí me ha pasado algunas veces 😅). La verdad es bastante fácil de hacer. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Puedes leer este &lt;a href="https://itsfoss.com/reset-linux-password-wsl/" rel="noopener noreferrer"&gt;artículo&lt;/a&gt; para más detalles.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En este caso voy hablar de cómo restablecer o cambiar la contraseña en Ubuntu 20.04 LTS ya que es la distribución que estoy utilizando en WSL, pero si usas otra distribución échale un vistazo al link que deje arriba!&lt;/p&gt;

&lt;h2&gt;
  
  
  Son tres simples pasos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1️⃣ Cambiar a root como usuario predeterminado
&lt;/h3&gt;

&lt;p&gt;Aquí debe abrir un terminal de &lt;strong&gt;cmd&lt;/strong&gt; de Windows y ejecutar el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# cmd&lt;/span&gt;
config &lt;span class="nt"&gt;--default-user&lt;/span&gt; root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Debe colocar &lt;code&gt;ubuntu2004&lt;/code&gt; antes del comando.&lt;br&gt;
Obviamente en el lugar de &lt;code&gt;user&lt;/code&gt; y &lt;code&gt;username&lt;/code&gt; debe colocar su usuario.&lt;/p&gt;

&lt;p&gt;Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# cmd&lt;/span&gt;
C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\u&lt;/span&gt;ser&amp;gt;ubuntu2004 config &lt;span class="nt"&gt;--default-user&lt;/span&gt; root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2️⃣ Cambia la contraseña
&lt;/h3&gt;

&lt;p&gt;Aquí debe abrir un terminal de &lt;strong&gt;wsl&lt;/strong&gt; y ejecutar el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# wsl&lt;/span&gt;
passwd username
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le pedirá que ingresé su nueva contraseña y luego confirmarla&lt;/p&gt;

&lt;p&gt;Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# wsl&lt;/span&gt;
root@user:/home/username# passwd username
New password:
Retype new password:
passwd: password updated successfully
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3️⃣ Vuelva a establecer su usuario como predeterminado
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# cmd&lt;/span&gt;
config &lt;span class="nt"&gt;--default-user&lt;/span&gt; username
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# cmd&lt;/span&gt;
C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\u&lt;/span&gt;ser&amp;gt;ubuntu2004 config &lt;span class="nt"&gt;--default-user&lt;/span&gt; username
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y listo ya sabes cómo cambiar la contraseña o restablecerla! 🎉&lt;/p&gt;

</description>
      <category>linux</category>
      <category>wsl</category>
      <category>tutorial</category>
      <category>windows</category>
    </item>
    <item>
      <title>¿Cómo funciona .npmignore?</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Mon, 05 Jul 2021 19:39:25 +0000</pubDate>
      <link>https://forem.com/franqsanz/como-funciona-npmignore-jhf</link>
      <guid>https://forem.com/franqsanz/como-funciona-npmignore-jhf</guid>
      <description>&lt;p&gt;Si alguna vez te pusiste a desarrollar un paquete para publicar en npm, seguro te pusiste a pensar 🤔: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Cómo hago para ignorar X archivo para que no se publique en npm?&lt;/li&gt;
&lt;li&gt;¿Con &lt;code&gt;.gitignore&lt;/code&gt; es suficiente?&lt;/li&gt;
&lt;li&gt;¿Cuándo debo usar un &lt;code&gt;.npmignore&lt;/code&gt;?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Con &lt;code&gt;.gitignore&lt;/code&gt; si puedes ignorar archivos, pero a veces no quieres ignorar X archivo y ahí es donde entra &lt;code&gt;.npmignore&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por ejemplo:&lt;/strong&gt; desarrollaste un paquete y a su vez un sitio web para su documentación. Si deseas tener todo en un mismo proyecto, es ahí donde es necesario un &lt;code&gt;.npmignore&lt;/code&gt; porque no vas a publicar todos los archivos de la web en npm, solo el paquete. &lt;/p&gt;

&lt;p&gt;Cuando npm no encuentra un &lt;code&gt;.npmignore&lt;/code&gt; utiliza el &lt;code&gt;.gitignore&lt;/code&gt; para ignorar los archivos.&lt;/p&gt;

&lt;p&gt;¿Cómo se ve?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Ejemplo de un .npmignore&lt;/span&gt;

img/
css/
index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como puedes ver es exactamente igual a un &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Puedes verificar si tu paquete ignorará los archivos que incluiste en &lt;code&gt;.npmignore&lt;/code&gt; ejecutando &lt;code&gt;npm pack&lt;/code&gt;, éste comando generará un &lt;a href="https://en.m.wikipedia.org/wiki/Tar_(computing)" rel="noopener noreferrer"&gt;tarball&lt;/a&gt; localmente que sería exactamente lo mismo que hace npm al publicarlo.&lt;/p&gt;

&lt;p&gt;Para saber más puedes leer los &lt;a href="https://docs.npmjs.com/cli/v7/using-npm/developers#keeping-files-out-of-your-package" rel="noopener noreferrer"&gt;documentos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Espero que este post super corto te sea de ayuda. 😃&lt;/p&gt;

&lt;p&gt;¡Saludos! &lt;/p&gt;

</description>
      <category>npm</category>
      <category>learning</category>
      <category>tutorial</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>¿Qué es Astro y cómo empezar?</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Wed, 30 Jun 2021 15:32:20 +0000</pubDate>
      <link>https://forem.com/franqsanz/que-es-astro-1d8g</link>
      <guid>https://forem.com/franqsanz/que-es-astro-1d8g</guid>
      <description>&lt;p&gt;¡Hola!&lt;/p&gt;

&lt;p&gt;La tecnología evoluciona todos los días, siempre hay algo nuevo y esta vez es Astro! 🤯&lt;/p&gt;

&lt;p&gt;Esta tecnología esta siendo muy bien aceptada en la comunidad, ya tiene más de ⭐ 3k estrellas en GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Pero qué es?&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Astro:&lt;/strong&gt; “Un nuevo tipo de creador de sitios estáticos que ofrece un rendimiento ultrarrápido con una experiencia de desarrollador moderna.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Puedes leer con más detalles en la &lt;a href="https://astro.build/blog/introducing-astro" rel="noopener noreferrer"&gt;introducción a Astro&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Básicamente lo que hace Astro es enviar menos JavaScript en el momento de la compilación convirtiendo todo en HTML estático.&lt;/p&gt;

&lt;p&gt;Lo más interesante es que puedes usar cualquier framework o librería (React, Vue, Svelte, etc), para desarrollar tu aplicación.&lt;br&gt;
Hasta usar varios frameworks en un mismo proyecto.&lt;/p&gt;

&lt;p&gt;Por ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Todo.jsx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Todo.vue&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Todo.svelte&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto me parece muy interesante, aunque dudo que sea bueno mezclar. 🤔&lt;/p&gt;
&lt;h2&gt;
  
  
  Iniciar un proyecto con Astro
&lt;/h2&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Importante&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;La versión &lt;strong&gt;mínima&lt;/strong&gt; de Node.js que se requiere es la &lt;strong&gt;14.15.1&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Inicializamos Astro &lt;/span&gt;
npm init astro
&lt;span class="c"&gt;# Instalamos las dependencias&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="c"&gt;# Ejecutamos el servidor local&lt;/span&gt;
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkvfnqiiodg50d73w4uzs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkvfnqiiodg50d73w4uzs.png" alt="Bienvenido a Astro" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Uso
&lt;/h3&gt;

&lt;p&gt;Estructura básica recomendada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── src/
│   ├── components/
│   └── pages/
│       └── index.astro
├── public/
└── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro de &lt;em&gt;Components&lt;/em&gt; agregaríamos nuestros archivos, por ejemplo un componente React y luego los importamos en un archivo &lt;code&gt;.astro&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Así es como se ve un archivo &lt;code&gt;.astro&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="s"&gt;import Nav from '../components/Nav.astro';&lt;/span&gt;
&lt;span class="s"&gt;import TodoReact from '../components/Todo.jsx';&lt;/span&gt;
&lt;span class="s"&gt;import TodoSvelte from '../components/Todo.svelte';&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="cp"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Astro&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;header&amp;gt;&lt;/span&gt;
     &lt;span class="c"&gt;&amp;lt;!-- Colocamo nuestro componente Astro --&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;Nav&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"contentTodo"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="c"&gt;&amp;lt;!-- Colocamo nuestro componente React --&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;TodoReact:visible&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="c"&gt;&amp;lt;!-- Colocamo nuestro componente Svelte --&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;TodoSvelte:visible&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prácticamente es HTML, solo que al principio del archivo colocamos el JavaScript dentro de un bloque de guiones (&lt;code&gt;---&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Routing
&lt;/h3&gt;

&lt;p&gt;El enrutamiento ocurre dentro de &lt;code&gt;src/pages/*&lt;/code&gt; los archivos &lt;code&gt;.astro&lt;/code&gt; se convierten en &lt;code&gt;.html&lt;/code&gt; estático.&lt;/p&gt;

&lt;p&gt;Por ejemplo tienes lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;index.astro&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;about.astro&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;404.astro&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los archivos de esta carpeta se corresponde con una URL pública.&lt;/p&gt;

&lt;p&gt;Ejemplo:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Archivo local&lt;/th&gt;
&lt;th&gt;URL publica&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/pages/index.astro&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/index.html&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;¡Astro tiene muchas características más!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/snowpackjs/astro#-partial-hydration" rel="noopener noreferrer"&gt;Hidratación parcial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/snowpackjs/astro#%EF%B8%8F-markdown" rel="noopener noreferrer"&gt;Markdown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/snowpackjs/astro#%EF%B8%8F-state-management" rel="noopener noreferrer"&gt;Administración de Estado&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/snowpackjs/astro#-styling" rel="noopener noreferrer"&gt;Estilismo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Etc&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Más info
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Puedes leer más sobre Astro en el &lt;a href="https://github.com/snowpackjs/astro" rel="noopener noreferrer"&gt;Readme&lt;/a&gt; del proyecto.&lt;/li&gt;
&lt;li&gt;Mira la &lt;a href="https://github.com/snowpackjs/astro-docs" rel="noopener noreferrer"&gt;documentación&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;También en esta demo que hizo Cassidy con &lt;a href="https://github.com/cassidoo/astro-react-vue-demo" rel="noopener noreferrer"&gt;Astro + React + Vue&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Aca dejo mi primera experiencia con &lt;a href="https://github.com/Franqsanz/astro-app-react-svelte-vue-demo" rel="noopener noreferrer"&gt;Astro + React + Svelte + Vue&lt;/a&gt;, también puedes verlo en &lt;a href="https://astro-app-demo.netlify.app/" rel="noopener noreferrer"&gt;vivo&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Echa un vistazo a este &lt;a href="https://css-tricks.com/a-look-at-building-with-astro/" rel="noopener noreferrer"&gt;artículo&lt;/a&gt; en CSS-Tricks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Hay muchos temas más para cubrir, pero espero que este breve artículo pueda servir como para entender un poco Astro y como empezar.&lt;br&gt;
Esta tecnología es muy &lt;strong&gt;nueva&lt;/strong&gt;, es probable que haya algunos &lt;strong&gt;errores&lt;/strong&gt;, pero el equipo de astro está trabajando duro todos los días.&lt;/p&gt;

&lt;p&gt;¡Saludos!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>astro</category>
      <category>webdev</category>
      <category>news</category>
    </item>
    <item>
      <title>Cree una mini librería CSS de sombras</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Tue, 27 Apr 2021 14:38:26 +0000</pubDate>
      <link>https://forem.com/franqsanz/cree-una-mini-libreria-css-de-sombras-1jcn</link>
      <guid>https://forem.com/franqsanz/cree-una-mini-libreria-css-de-sombras-1jcn</guid>
      <description>&lt;p&gt;Me puse a crear un proyecto de fin de semana (que no lo hice en un fin de semana 🙃), se trata de una librería CSS de sombras, se me ocurrió porque tenía curiosidad de como crear una. &lt;br&gt;
Es algo básico pero siempre se aprende algo nuevo al crear proyectos. &lt;/p&gt;
&lt;h2&gt;
  
  
  Como funciona
&lt;/h2&gt;

&lt;p&gt;Hay dos formas de usar esta librería:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;De forma tradicional descargando un archivo &lt;code&gt;.css&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Instalando desde npm.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Echemos un vistazo a lo tradicional:
&lt;/h3&gt;

&lt;p&gt;Enlazamos el archivo como cualquier otro archivo &lt;code&gt;.css&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"./shadows.min.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta librería solo contiene &lt;strong&gt;clases&lt;/strong&gt;, entonces hacemos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"sw-b-30-b"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!--
  Está clase contiene una sombra tipo blur de 30px posicionada en la línea inferior del elemento,
  el nombre completo sería así: "shadows-blur-30-botton".
--&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para saber todas las clases que existen puedes leer la &lt;a href="https://github.com/Franqsanz/box-shadows.css" rel="noopener noreferrer"&gt;Documentación&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hay tres tipos de sombras:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Efecto Blur.&lt;/li&gt;
&lt;li&gt;Efecto Solid.&lt;/li&gt;
&lt;li&gt;Efecto multi sombra(experimental).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Echemos un vistazo al paquete npm:
&lt;/h3&gt;

&lt;p&gt;Decidí crear un paquete porque me pareció interesante poder usarlo con Styled Components o otro framework de CSS-in-JS.&lt;/p&gt;

&lt;p&gt;Instalamos el paquete:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;box-shadows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acá un ejemplo con Styled Components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;styled-components&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;sw_b_20_b&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;box-shadows&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="s2"&gt;`
  width: 200px;
  height: 200px;
  box-shadow: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;sw_b_20_b&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;;
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Seguramente existen otros proyectos parecidos y que estén mejor desarrollados, en mi caso solo fue crear algo por solo curiosidad.&lt;br&gt;
De todas formas me gustó hacer esto. &lt;/p&gt;

&lt;h2&gt;
  
  
  Enlaces
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cssshadows.netlify.app" rel="noopener noreferrer"&gt;Sitio web&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Franqsanz/box-shadows.css" rel="noopener noreferrer"&gt;Documentación&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/box-shadows" rel="noopener noreferrer"&gt;Paquete npm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Saludos!&lt;/p&gt;

</description>
      <category>css</category>
      <category>javascript</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Un preloader parecido a microsoft cortana con puro CSS</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Thu, 25 Mar 2021 03:41:10 +0000</pubDate>
      <link>https://forem.com/franqsanz/un-preloader-parecido-a-microsoft-cortana-con-puro-css-4b9a</link>
      <guid>https://forem.com/franqsanz/un-preloader-parecido-a-microsoft-cortana-con-puro-css-4b9a</guid>
      <description>&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/franqsanz/embed/MWjYWZr?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>html</category>
      <category>css</category>
      <category>codepen</category>
    </item>
    <item>
      <title>Configuración de CORS en ApolloServer</title>
      <dc:creator>Franco Andrés</dc:creator>
      <pubDate>Mon, 01 Mar 2021 15:23:11 +0000</pubDate>
      <link>https://forem.com/franqsanz/configuracion-de-cors-en-apolloserver-gpi</link>
      <guid>https://forem.com/franqsanz/configuracion-de-cors-en-apolloserver-gpi</guid>
      <description>&lt;p&gt;Tenía un error con CORS en mí API GraphQL que está construida con Apollo Server Lambda, cuando hacía una solicitud desde el frontend me daba el típico error en la consola, que más de uno/a debe haber visto alguna vez.&lt;br&gt;
Pero yo me pregunté, en mí API, sí agregué la opción de CORS, entonces ¿Dónde está el problema?&lt;/p&gt;
&lt;h2&gt;
  
  
  Sobre &lt;code&gt;ApolloServer()&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;El &lt;code&gt;ApolloServer()&lt;/code&gt; puede recibir muchas opciones, uno es el objeto CORS pero este no funciona o en mí caso no funcionó. &lt;/p&gt;

&lt;p&gt;Un ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApolloServer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apollo-server-lambda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;typeDefs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;resolvers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./graphql/index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApolloServer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;typeDefs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;resolvers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// En teoría esto debería funcionar. &lt;/span&gt;
  &lt;span class="na"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Solución
&lt;/h2&gt;

&lt;p&gt;Después de buscar en internet encontré una solución en github. 😎&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Vuelvo a aclarar que está solución es aplicándola en &lt;strong&gt;Apollo Server Lambda&lt;/strong&gt;, la verdad que no tengo idea si está solución funciona también en el resto de módulos de Apollo Server, creería que es lo mismo, pero la verdad que no lo sé.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;La solución que encontré fue eliminar CORS de &lt;code&gt;ApolloServer()&lt;/code&gt; y pasarlo al &lt;code&gt;server.createHandler()&lt;/code&gt; que es lo que vamos a exportar. &lt;/p&gt;

&lt;p&gt;Pasamos exactamente el mismo objeto CORS.&lt;/p&gt;

&lt;p&gt;Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createHandler&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y acá el código completo para que se entienda mejor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApolloServer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apollo-server-lambda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;typeDefs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;resolvers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./graphql/index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApolloServer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;typeDefs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;resolvers&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createHandler&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Eso fue todo lo que tuve que hacer, solamente cambiar de lugar el objeto CORS.&lt;/p&gt;

&lt;p&gt;¡¡Saludos!! 🤙🏻&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>node</category>
      <category>lambda</category>
      <category>api</category>
    </item>
  </channel>
</rss>
