npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@sqymagma/magma-theme

v0.1.5

Published

Magma components

Downloads

5

Readme

Magma themes

Los themes se utilizan para ajustar y modificar componentes y elementos de la aplicación para que se ajusten a un estilo visual y estructural específico.

Con los themes de Magma se pueden personalizar fácilmente los elementos de un sistema: tipografía, breakpoints, colores, espaciados, etc. cambiando un conjunto de primitives y eliminando así la necesidad de modificar elementos y componentes de forma individual.

Índice

Theme Scheme

Colors

{
  color: {
    description: String,
    colors: {
      rolName: {
        value: String (Hex),
        opacity: String or Number
      },
      rolName: {
        type: "RGB",
        value: Array (length 3),
        opacity: String or Number
      },
      rolName: {
        type: "HSL",
        value: Array (length 3),
        opacity: String or Number
      },
    }
  }
}

Términos

| Termino | Definición | Ejemplo | | ---------- | -------------------------------------------------------------------------------------- | ------------------ | | Theme | Un set único de primitives con un valor específico | Default | | Primitives | El código identificador de un rol. Son universales y no pueden cambiar en cada theme | interactive01 | | Roles | El rol para el uso del primitive. Los roles pueden cambiar por cada theme | Fondo para botones |

Categorías

Un theme de Magma tienen dos categorías en sus primitives: Magma primitives y Custom primitives

  • magma-primitives.js
  • custom-primitives.js

Magma Primitives

Las Magma primitives deben ajustarse al formato y estructura para que puedan ser procesadas correctamente utilizando la función parseTheme() de Magma.

Es posible que algunas entradas dependan de otras. Por ejemplo la entrada textStyles necesita que estén definidas tanto fontFamilies como mediaqueries ya que precisamente lo que textStyes define son los estilos de tipografía dependiendo de los breakpoints.

Las Magma primitives son:

  • colors
  • fontFamilies
  • textStyles
  • mediaqueries
  • gradients
  • shadows

Ejemplo de parseado de parseTheme() en Magma primitives

La entrada:


{
color: {
colors: {
text01: {
value: "#000000",
opacity: "1.0"
}
text02: {
value: "#000000,
opacity: "0.5"
}
}
}
}

```

Obtendrá esta salida:

```

{
colors: {
text01: "#000000",
text02: "rgba(0, 0, 0, 0.5)",
}
}

Custom primitives

Las Custom primitives son simples objetos javascript que no necesitan ser parseadas por parseTheme().

Añadir unas primitives para controlar el timming de nuestras animaciones css es tan fácil como escribir:

export default {
  timmings: {
    s: "0.1s",
    m: "0.5s",
    l: "1.0s"
  }
}

Accederíamos a estas primitives con ${props => props.theme.timming.s}.

Formato y estructura

Antes mencionámos que las Magma primitives tenían un formato y estructura. Ahora veremos en qué consisten.

Color

En la primitiva color construye la paleta de colores del sistema. Lo más importantes son las entradas de colores en formato objeto. Indicando e valor en formato hexadeciamal y la opacidad en un rango de 0 a 1. También podemos especificar el color directamente en formatos HSL o RGB añadiendo además la propiedad opacity.

Si la opacidad del color es 1 podemos omitir por completo la propiedad.

Ejemplos

// Color en formato HEX
export default {
  color: {
    colors: {
      interactive01: { value: "#ffffff" },
      ...
    }
  },
// Color en formato RGB + opacity
export default {
  color: {
    colors: {
      interactive01: {
        type: "RGB",
        value: ["32", "50", "250"],
        opacity: "0.5"
      },
      ...
    }
  },
// Color en formato HSL + Opacity
export default {
  color: {
    colors: {
      interactive01: {
        type: "HSL",
        value: ["0", "50%", "50%"],
        opacity: "0.5"
      },
      ...
    }
  },

Font family

Especifica las familias de tipografías. Están definidos las entradas primary, secondary y monospace. Si existiésen más debemos añadirlas siguiendo la nombenclatura: tertiary, quaternary, etc..

  fontFamily: {
    fontFamilies: {
      primary: "Gilroy",
      secondary: "Work Sans",
      monospace: "Space Mono"
    }
  }

Mediaqueries

Las primitives mediaqueries definen los breakpoints del sistema (utilizando la mentalidad mobile-first), tanto el naming como los tamaños de los breakpoints, mínimo o mínimo y máximo.

El primer breakpoint siempre debe tener el minWidth igualado a null.

export default {
  mediaquery: {
    mediaqueries: [
      {
        label: "default",
        minWidth: null
      },
      {
        label: "s",
        minWidth: "40em"
      },
      {
        label: "m",
        minWidth: "52em"
      },
      {
        label: "l",
        minWidth: "64em"
      }
    ]
  },

Text Styles

Estas primitives definen los estilos de textos responsive

  textStyle: {
    defaultStyles: {
      fontWeight: 400,
      lineHeight: 1.4,
      letterSpacing: "0px",
      fontSize: "10px"
    },
    textStyles: [
      {
        name: "mega",
        fontSize: "60px",
        letterSpacing: "0px",
        responsive: [
          {
            breakpoint: "m",
            fontStyle: "normal",
            fontSize: "80px"
          }
        ]
      }
    ]
  },

  gradient: {
    gradients: {
      gradient01: {
        direction: "to top",
        stops: [
          {
            color: "#443CF3",
            opacity: 1.0,
            position: "0%"
          },
          {
            color: "#425FF7",
            opacity: 1.0,
            position: "100%"
          }
        ]
      }
    }
  },

  shadow: {
    shadows: {
      big: {
        x: 0,
        y: 25,
        blur: 128,
        color: "#000000",
        opacity: 0.4
      }
    }
  }
}

Magma no provee ningún theme por defecto.

Importar un theme

Para utilizar un theme como mínimo debemos importar la función parseTheme() y un theme tanto con las primitives base como con las custom primitives (opcionales)

Podemos juntar en un solo archivo las primitives base y las custom para facilitar la importación

Podemos crear los archivos de un theme desde cero o utilizando magma-cli, lo que nos permite crear unos archivos que sirven de boilerplate: magma-cli newtheme default

import React from "react"
import { ThemeProvider } from "styled-component"
import { parseTheme } from "@secuoyas/magma-theme"
import theme from "./themes/default"
import customPrimitives from "./themes/default/custom.js"

const defaultTheme = {
  ...parseTheme(theme),
  ...customPrimitives
}

const App = () => (
  <ThemeProvider theme={defaultTheme}>
    <p>Hi Magma Theme</p>
  </ThemeProvider>
)

export default App

CSS Global

Probablemente queramos unos estilos globales para toda la aplicación. Como el font-family, resets, normalize, etc..

styled-components nos provee de una función para ello: createGlobalStyle que además de añadir estilos globales nos permite temificarlos con ThemeProvider. createGlobalStyle nos crea un componente de React el cual utilizaremos dentro de nuestro component-tree para aplicar el estilo global. Lo normal es que utilizemos este componente en el raíz de nuestra aplicación.

import React from "react"
import { ThemeProvider, createGlobalStyle } from "styled-component"
import { parseTheme } from "@secuoyas/magma-theme"
import theme from "./themes/default"
import customPrimitives from "./themes/default/custom.js"

const GlobalStyle = createGlobalStyle`
  body {
    font-family: "Gilroy";
    background-color = ${props => props.theme.colors.uiBackground};
  }
`

const defaultTheme = {
  ...parseTheme(theme),
  ...customPrimitives
}

const App = () => (
  <ThemeProvider theme={defaultTheme}>
    <React.Fragment>
      <GlobalStyle />
      <p>Hi Magma Theme</p>
    </React.Fragment>
  </ThemeProvider>
)

export default App

Color role guide

| Primitive | Role | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | interactive01 | Color primario de interacción.Color para botones primarios. | | interactive02 | Color secundario de interacción.Color para botones secundarios. | | interactive03 | Color de contraste 4.5:1 de interacción.Color para botones terciarios. | | interactive04 | Color de contraste 3:1 de interacción.Elementos seleccionados.Elementos activos.Color para iconos acentuados. | | text01 | Color de texto primario.Cuerpo de texto.Encabezados. | | text02 | Color de texto secundario.Etiquetas de formularios.Texto de ayuda. | | text03 | Color de texto terciario. | | text04 | Color de texto placeholder. | | textOnInteractive01 | Texto en interactivos 01 | | textOnInteractive02 | Texto en interactivos 02 | | textOnInteractive03 | Texto en interactivos 03 | | textOnInteractive04 | Texto en interactivos 04 | | ui-background | Color de fondo por defecto para página. | | ui01 | Color de fondo primario para contenedoresColor de fondo secundario para página. | | ui02 | Color de fondo secundario para contenedoresColor de fondo primario para página (probablemente igual que ui-background). | | ui03 | Borde sutil.Color de fondo terciario. | | ui04 | Borde contraste medio.Elemento de contraste 3:1. | | ui05 | Borde alto contraste.Elemento de contraste 4.5:1.Elementos enfatizados | | link01 | Color para link principal | | link02 | Color para link secundario | | link03 | Color para link terciario | | support01 | Error | | support02 | Warning | | support03 | Information | | support04 | Sucess | | field01 | Color de fondo para inputs. | | field02 | Color de fondo para inputs que estén sobre ui02. | | inverse01 | Color inverso para textos.Color inverso para iconos. | | inverse02 | Color de fondo alto contraste.Elementos de alto contraste. | | disabled01 | Campos desactivados.Fondos desactivados (botones..)Bordes desactivados. | | disabled02 | Elementos desactivados en disabled01.Etiquetas desactivadasTexto desactivado en disabled01.Iconos desactivados. | | --- | --- | | interactive01Hover | Hover para interactive01 | | interactive02Hover | Hover para interactive02 | | interactive03Hover | Hover para interactive03 | | interactive01Active | Active para interactive01 | | interactive02Active | Active para interactive02 | | interactive03Active | Active para interactive03 | | interactive01Focus | Focus para interactive01 | | interactive02Focus | Focus para interactive02 | | interactive03Focus | Focus para interactive03 | | link01Hover | Color para Hover link principal | | link02Hover | Color para Hover link secundario | | link03Hover | Color para Hover link terciario | | link01Active | Color para Active link principal | | link02Active | Color para Active link secundario | | link03Active | Color para Active link terciario |