Categories
Chakra UI Vue

UI Development with Chakra UI Vue — Images and Inputs

Chakra UI Vue is a UI framework made for Vue.js that lets us add good-looking UI components into our Vue app.

This article will look at how to get started with UI development with Chakra UI Vue.

Images

We can add images with the c-image component.

For instance, we can write:

<template>
  <c-box>
    <c-image src="https://picsum.photos/id/237/200/300" alt="dog" />
  </c-box>
</template>

<script>
import { CBox, CImage } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CImage,
  },
};
</script>

We set the src prop to the URL of the image.

alt has the text description of the image.

The size prop sets the size:

<template>
  <c-box>
    <c-image
      size="100px"
      src="https://picsum.photos/id/237/200/300"
      alt="dog"
    />
  </c-box>
</template>

<script>
import { CBox, CImage } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CImage,
  },
};
</script>

We can set the URL of a fallback image that loads when the actual image can’t load with the fallback-src prop:

<template>
  <c-box>
    <c-image
      size="100px"
      src="abc"
      alt="dog"
      fallback-src="https://via.placeholder.com/150"
    />
  </c-box>
</template>

<script>
import { CBox, CImage } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CImage,
  },
};
</script>

Input

We can add an input with the c-input component:

<template>
  <c-box>
    <c-input placeholder="Basic Input" />
  </c-box>
</template>

<script>
import { CBox, CInput } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CInput,
  },
};
</script>

The size prop sets the size:

<template>
  <c-box>
    <c-input placeholder="Basic Input" size="lg" />
  </c-box>
</template>

<script>
import { CBox, CInput } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CInput,
  },
};
</script>

lg is large.

The size value can also be set to md for medium and sm for small.

The variant prop sets the style variant of the input.

For instance, we can write:

<template>
  <c-box>
    <c-stack spacing="3">
      <c-input variant="outline" placeholder="Outline" />
      <c-input variant="filled" placeholder="Filled" />
      <c-input variant="flushed" placeholder="Flushed" />
      <c-input variant="unstyled" placeholder="Unstyled" />
    </c-stack>
  </c-box>
</template>

<script>
import { CBox, CStack, CInput } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CStack,
    CInput,
  },
};
</script>

to set the variant prop to set the styles.

outline adds an outline.

filled adds a background color.

flushed removes the padding for the placeholder.

Also, we can add addons to the input.

For instance, we can write:

<template>
  <c-box>
    <c-input-group>
      <c-input-left-addon>+234</c-input-left-addon>
      <c-input type="tel" roundedLeft="0" placeholder="phone number" />
    </c-input-group>
  </c-box>
</template>

<script>
import { CBox, CInputGroup, CInput, CInputLeftAddon } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CInputGroup,
    CInput,
    CInputLeftAddon,
  },
};
</script>

to use the c-input-left-addon component to add the addon to the left of the input.

The c-input-right-addon adds the input addon to the right:

<template>
  <c-box>
    <c-input-group>
      <c-input rounded="0" placeholder="mysite" />
      <c-input-right-addon>.com</c-input-right-addon>
    </c-input-group>
  </c-box>
</template>

<script>
import { CBox, CInputGroup, CInput, CInputRightAddon } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CInputGroup,
    CInput,
    CInputRightAddon,
  },
};
</script>

Conclusion

We can add images and inputs with Chakra UI Vue.

Categories
Chakra UI Vue

UI Development with Chakra UI Vue — Icon Buttons

Chakra UI Vue is a UI framework made for Vue.js that lets us add good-looking UI components into our Vue app.

This article will look at how to get started with UI development with Chakra UI Vue.

Icon Buttons

We can add icon buttons with Chakra UI Vue.

To do this, we write:

<template>
  <c-box> <c-icon-button icon="check" aria-label="check" /> </c-box>
</template>

<script>
import { CBox, CIconButton } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CIconButton,
  },
};
</script>

We add the icon prop to set the name of the icon to display.

aria-label has the text description of the icon.

The variant-color prop sets the background color:

<template>
  <c-box>
    <c-icon-button icon="check" aria-label="check" variant-color="blue" />
  </c-box>
</template>

<script>
import { CBox, CIconButton } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CIconButton,
  },
};
</script>

size prop sets the size:

<template>
  <c-box>
    <c-icon-button icon="check" aria-label="check" size="lg" />
  </c-box>
</template>

<script>
import { CBox, CIconButton } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CIconButton,
  },
};
</script>

Custom icons also works with c-icon-button .

For instance, we can write:

main.js

import Vue from "vue";
import Chakra, { CThemeProvider } from "@chakra-ui/vue";
import App from "./App.vue";

const customIcons = {
  fortranIcon: {
    path: `
      <path d="M19.536 0H4.464A4.463 4.463 0 0 0 0 4.464v15.073A4.463 4.463 0 0 0 4.464 24h15.073A4.463 4.463 0 0 0 24 19.536V4.464A4.463 4.463 0 0 0 19.536 0zm1.193 6.493v3.871l-.922-.005c-.507-.003-.981-.021-1.052-.041-.128-.036-.131-.05-.192-.839-.079-1.013-.143-1.462-.306-2.136-.352-1.457-1.096-2.25-2.309-2.463-.509-.089-2.731-.176-4.558-.177L10.13 4.7v5.82l.662-.033c.757-.038 1.353-.129 1.64-.252.306-.131.629-.462.781-.799.158-.352.262-.815.345-1.542.033-.286.07-.572.083-.636.024-.116.028-.117 1.036-.117h1.012v9.3h-2.062l-.035-.536c-.063-.971-.252-1.891-.479-2.331-.311-.601-.922-.871-2.151-.95a11.422 11.422 0 0 1-.666-.059l-.172-.027.02 2.926c.021 3.086.03 3.206.265 3.465.241.266.381.284 2.827.368.05.002.065.246.065 1.041v1.039H3.271v-1.039c0-.954.007-1.039.091-1.041.05-.001.543-.023 1.097-.049.891-.042 1.033-.061 1.244-.167a.712.712 0 0 0 .345-.328c.106-.206.107-.254.107-6.78 0-6.133-.006-6.584-.09-6.737a.938.938 0 0 0-.553-.436c-.104-.032-.65-.07-1.215-.086l-1.026-.027V2.622h17.458v3.871z"/>
    `,
    viewBox: "0 0 40 40"
  }
};

Vue.use(Chakra, {
  icons: {
    extend: {
      ...customIcons
    }
  }
});

Vue.config.productionTip = false;

new Vue({
  render: (h) => h(CThemeProvider, [h(App)])
}).$mount("#app");

App.vue

<template>
  <c-box>
    <c-icon-button icon="fortranIcon" aria-label="check" size="lg" />
  </c-box>
</template>

<script>
import { CBox, CIconButton } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CIconButton,
  },
};
</script>

customIcons has the SVG icon’s path element.

We merge customIcons into extend to add the icon.

And we use the icon by setting the icon prop to the property name of the icon in customIcon .

Conclusion

We can add icon buttons easily with Chakra UI Vue.

Categories
Chakra UI Vue

UI Development with Chakra UI Vue — Icons

Chakra UI Vue is a UI framework made for Vue.js that lets us add good-looking UI components into our Vue app.

This article will look at how to get started with UI development with Chakra UI Vue.

Icon

We can add an icon with the c-icon prop.

For instance, we can write:

<template>
  <c-box>
    <c-icon name="phone" :mr="2" />
    <c-icon name="check-circle" size="24px" :mr="2" />
    <c-icon name="warning" size="32px" color="red.500" :mr="2" />
  </c-box>
</template>

<script>
import { CBox, CIcon } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CIcon,
  },
};
</script>

name sets the name of the icon to display.

size has the size.

color has the color.

We can also add 3rd party icons with c-icon .

To do this, we write:

main.js

import Vue from "vue";
import Chakra, { CThemeProvider } from "@chakra-ui/vue";
import { faGlobeAfrica } from "@fortawesome/free-solid-svg-icons";

import App from "./App.vue";
Vue.use(Chakra, {
  icons: {
    iconPack: "fa",
    iconSet: {
      faGlobeAfrica
    }
  }
});

Vue.config.productionTip = false;

new Vue({
  render: (h) => h(CThemeProvider, [h(App)])
}).$mount("#app");

App.vue

<template>
  <c-box>
    <c-icon name="globe-africa" />
  </c-box>
</template>

<script>
import { CBox, CIcon } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CIcon,
  },
};
</script>

We install the @fortawesome/free-solid-svg-icons package and add some options into the 2nd argument of Vue.use .

iconPack sets the icon pack to use.

iconSet has the icon we want to use.

Then we set name to show the icon in App.vue .

To add a custom icon, we can add our icons to the Chakra UI options.

To do this, we write:

main.js

import Vue from "vue";
import Chakra, { CThemeProvider } from "@chakra-ui/vue";
import App from "./App.vue";

const customIcons = {
  fortranIcon: {
    path: `
      <path d="M19.536 0H4.464A4.463 4.463 0 0 0 0 4.464v15.073A4.463 4.463 0 0 0 4.464 24h15.073A4.463 4.463 0 0 0 24 19.536V4.464A4.463 4.463 0 0 0 19.536 0zm1.193 6.493v3.871l-.922-.005c-.507-.003-.981-.021-1.052-.041-.128-.036-.131-.05-.192-.839-.079-1.013-.143-1.462-.306-2.136-.352-1.457-1.096-2.25-2.309-2.463-.509-.089-2.731-.176-4.558-.177L10.13 4.7v5.82l.662-.033c.757-.038 1.353-.129 1.64-.252.306-.131.629-.462.781-.799.158-.352.262-.815.345-1.542.033-.286.07-.572.083-.636.024-.116.028-.117 1.036-.117h1.012v9.3h-2.062l-.035-.536c-.063-.971-.252-1.891-.479-2.331-.311-.601-.922-.871-2.151-.95a11.422 11.422 0 0 1-.666-.059l-.172-.027.02 2.926c.021 3.086.03 3.206.265 3.465.241.266.381.284 2.827.368.05.002.065.246.065 1.041v1.039H3.271v-1.039c0-.954.007-1.039.091-1.041.05-.001.543-.023 1.097-.049.891-.042 1.033-.061 1.244-.167a.712.712 0 0 0 .345-.328c.106-.206.107-.254.107-6.78 0-6.133-.006-6.584-.09-6.737a.938.938 0 0 0-.553-.436c-.104-.032-.65-.07-1.215-.086l-1.026-.027V2.622h17.458v3.871z"/>
    `,
    viewBox: "0 0 40 40"
  }
};

Vue.use(Chakra, {
  icons: {
    extend: {
      ...customIcons
    }
  }
});

Vue.config.productionTip = false;

new Vue({
  render: (h) => h(CThemeProvider, [h(App)])
}).$mount("#app");

App.vue

<template>
  <c-box>
    <c-icon name="fortranIcon" />
  </c-box>
</template>

<script>
import { CBox, CIcon } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CIcon,
  },
};
</script>

We have the customIcons object with the SVG path element set as the value of path .

Then we merge the customIcons object into extend .

And in App.vue , we set the name to the property name of the icon in customIcons .

Conclusion

We can add various kinds of icons easily with Chakra UI Vue.

Categories
Chakra UI Vue

UI Development with Chakra UI Vue — Grid Layout and Heading

Chakra UI Vue is a UI framework made for Vue.js that lets us add good-looking UI components into our Vue app.

This article will look at how to get started with UI development with Chakra UI Vue.

Grid Layout

We can add a grid layout with the c-grid component.

For instance, we can write:

<template>
  <c-box>
    <c-grid w="600px" template-columns="repeat(5, 1fr)" gap="6">
      <c-box w="100%" h="10" bg="blue.300" />
      <c-box w="100%" h="10" bg="vue.300" />
      <c-box w="100%" h="10" bg="orange.300" />
      <c-box w="100%" h="10" bg="pink.300" />
      <c-box w="100%" h="10" bg="red.300" />
    </c-grid>
  </c-box>
</template>

<script>
import { CBox, CGrid } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CGrid,
  },
};
</script>

to add a grid container with it.

template-columns lets us define the columns for the grid.

gap lets us set the gap between each grid item.

Then we have c-box inside it to add the grid items.

w is the width. h is the height. bg is the background color.

Heading

We can add a heading with the c-heading component.

For example, we can write:

<template>
  <c-box>
    <c-heading>I'm a Heading</c-heading>
  </c-box>
</template>

<script>
import { CBox, CHeading } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CHeading,
  },
};
</script>

We can set the tag that it’s rendered as with the as prop.

The size prop sets the size of the heading.

For example, we can write:

<template>
  <c-box>
    <c-heading as="h1" size="2xl">I'm a Heading</c-heading>
  </c-box>
</template>

<script>
import { CBox, CHeading } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CHeading,
  },
};
</script>

to set the tag and size.

2xl is the biggest size.

Other sizes include xl , lg , md , sm , and xs .

xl is extra large. lg is large. md is medium. sm is small and xs is extra small.

We can also change the font size with the fontSize prop:

<template>
  <c-box>
    <c-heading as="h1" fontSize="50px">I'm a Heading</c-heading>
  </c-box>
</template>

<script>
import { CBox, CHeading } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CHeading,
  },
};
</script>

Conclusion

We can add a grid layout and heading with Chakra UI Vue.

Categories
Chakra UI Vue

UI Development with Chakra UI Vue — Flex Container and Form Control

Chakra UI Vue is a UI framework made for Vue.js that lets us add good-looking UI components into our Vue app.

This article will look at how to get started with UI development with Chakra UI Vue.

Flex Container

We can add a flex container with the c-flex component.

For instance, we can write:

<template>
  <c-box>
    <c-flex align="center">
      <c-flex bg="green.50" align="flex-end">
        <c-text>Box 1</c-text>
      </c-flex>
      <c-flex bg="blue.50" size="150px" align="center" justify="center">
        <c-text text-align="center" bg="orange.50"> Box 2 </c-text>
      </c-flex>
      <c-box>
        <c-text bg="tomato" color="white"> Box 3 </c-text>
      </c-box>
    </c-flex>
  </c-box>
</template>

<script>
import { CBox, CFlex, CText } from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CFlex,
    CText,
  },
};
</script>

We add the c-flex component to add a container that has the CSS display property set to flex .

The bg prop sets the background color.

align sets the justify-items CSS property.

text-align sets the text-align CSS property.

size sets the width and height.

Form Control

We can add a form control container with the c-form-control component.

For instance, we can write:

<template>
  <c-box>
    <c-form-control>
      <c-form-label for="email">Email address</c-form-label>
      <c-input type="email" id="email" />
      <c-form-helper-text> We'll never share your email. </c-form-helper-text>
    </c-form-control>
  </c-box>
</template>

<script>
import {
  CBox,
  CFormControl,
  CFormLabel,
  CFormHelperText,
  CInput,
} from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CFormControl,
    CFormLabel,
    CFormHelperText,
    CInput,
  },
};
</script>

We add the c-form-label component to add a label for the input.

c-input is a text input.

c-form-helper-text is a container for the helper text.

Radio Button

We can put radio buttons inside a c-form-control .

To do that, we write:

<template>
  <c-box>
    <c-form-control>
      <c-form-label as="legend">Favorite fruit</c-form-label>
      <c-radio-group default-value="orange">
        <c-radio value="apple">apple</c-radio>
        <c-radio value="orange">orange</c-radio>
        <c-radio value="grape">grape</c-radio>
      </c-radio-group>
      <c-form-helper-text> Select only if you're a fan. </c-form-helper-text>
    </c-form-control>
  </c-box>
</template>

<script>
import {
  CBox,
  CFormControl,
  CFormLabel,
  CFormHelperText,
  CRadio,
  CRadioGroup,
} from "@chakra-ui/vue";

export default {
  components: {
    CBox,
    CFormControl,
    CFormLabel,
    CFormHelperText,
    CRadio,
    CRadioGroup,
  },
};
</script>

We add the c-radio-group component to group the c-radio components.

as sets the tag to render the component as.

default-value sets the default value to pick from the group.

Each c-radio component has a value prop to set the value.

Conclusion

We can add flex containers and form controls with Chakra UI Vue.