Kongponents is a Vue component library of frequently needed UI elements. They were developed to solve Kong (opens new window)'s application needs, but are generic enough to use in any web application.

# Installation

The version of Kongponents package(s) you install depends on the Vue dependency in your project.

# Choose your Vue dependency version

# Vue 2.7

This version of all Kongponents removes the dependency of the external @vue/composition-api plugin and adds vue to the peerDependencies, requiring a version of vue that matches the following pattern: >= 2.7.0 < 3

All packages for Vue 2.7 utilize the @latest tag on npm, meaning you can install like this:

# Install the 7.x version
yarn add @kongponents/kbutton

# Vue 2.6 and below

If you're installing for Vue 2.6.x and below, you will want to install via the @legacy tag on npm like this:

# Install the 6.x version
yarn add @kongponents/kbutton@legacy

# Vue 3

If you want to try out Vue 3 support, install the latest release of @kong/kongponents (note the new package name). You can find more info on here for installation instructions and migration notes (opens new window).

# Component packages

To begin using Kongponents, you must first import the base @kongponents/styles package. Read more about the style guide usage.

Next, you will need to install each desired component. You can install multiple components at once, or one at a time as needed; however, keep in mind that you need to install the proper version based on your project's Vue dependency (as outlined above).

$ yarn add @kongponents/styles @kongponents/kbutton

# Transpile dependencies

You will likely need to transpile all of the @kongponents packages in your project. If your project already has a vue.config.js file, just add the following transpileDependencies entry

// vue.config.js

module.exports = {
  transpileDependencies: [
    /@kongponents\/.*/
  ]
}

If your project does not have a vue.config.js file and instead uses webpack config files, you can add a loader rule (for example, for babel-loader) similar to the following (only showing the relevant entries)

// webpack.config.js

module.exports = (env) => {
  return {
    module: {
      loaders: [
        // transpile @kongponents packages
        {
          test: /\.js$/,
          include: /(node_modules)\/(@kongponents)/,
          loader: 'babel-loader',
        },
        // process all .js files, but ignore all other node_modules not listed above
        {
          test: /\.js$/,
          exclude: /(node_modules)/,
          loader: 'babel-loader'
        },
      ]
    }
  }
}

# Raw loader

The KIcon component, utilized within many other components, imports .svg files directly, so a loader is needed in order to render these in your application such as the webpack raw-loader (opens new window).

Start by installing raw-loader

yarn add --dev raw-loader

To utilize the loader, in your vue.config.js file, add the following inside chainWebpack

module.exports = {
  chainWebpack: (config) => {
    // SVG Loader
    // With the following SVG rules, svg files may be imported from packages, Vue, etc. normally.
    // If referencing a SVG file from src/assets/img (local) you MUST add '.svg?local' suffix to the file path
    // for the webpack loader to properly render the file.

    const svgRule = config.module.rule('svg')

    svgRule.uses.clear()
    svgRule
      .oneOf('local')
      .resourceQuery(/local/)
      .use('url')
      .loader('url-loader')
      .options({
        limit: 10000,
        name: 'img/[name].[hash:7].[ext]'
      }).end().end()
      .oneOf('normal')
      .use('raw')
      .loader('raw-loader')
      .end().end()
  },
}

If you need to reference local SVG files (e.g. image assets for CSS background images) you will need to add the suffix ?local to the end of the image filename. For example:

<img src="/path/to/img/picture.svg?local">

<style>
  .image {
    background-image: url('../img/picture.svg?local');
  }
</style>

# CSS variables

If you choose to utilize any of the CSS custom properties (variables) (opens new window) included in the @kongponents packages and your project uses PostCSS (opens new window), you will likely need use the postcss-custom-properties PostCSS plugin (opens new window) so that the variables are preserved in their original form.

$ yarn add postcss-custom-properties --dev

# or

$ npm install postcss-custom-properties --save-dev

Next, add a postcss.config.js file to your project with the following content

// postcss.config.js

module.exports = () => ({
  plugins: {
    'postcss-custom-properties': {
      preserve: true
    }
  }
})

# Usage

You can import and register components globally (e.g. in your Vue entry file, like main.js)

import KButton from '@kongponents/kbutton';
Vue.component('KButton', KButton);

Or locally inside another component

import KButton from '@kongponents/kbutton';
export default {
  ...
  components: { KButton },
  ...
};

# Without Bundle System

You can also use Kongponents in a project where there is no build system as long as Vue is included on the page. Each Kongponent is packaged as a umd.js file (opens new window), so as long as you have loaded Vue in your project the Kongponent will work as intended.

Note

You must import the CSS from the @kongponents/styles package along with Vue.