4.13.0 • Published 4 days ago

@commercelayer/react-components v4.13.0

Weekly downloads
238
License
MIT
Repository
github
Last release
4 days ago

Commerce Layer React Components

A collection of reusable React components that makes it super fast and simple to build your own custom commerce UI, leveraging Commerce Layer API.

What is Commerce Layer?

Commerce Layer is a headless platform that lets you easily build enterprise-grade ecommerce into any website, by using the language, CMS, and tools you already master and love.

Getting started

To get started with Commerce Layer React Components you need to install them and then get the credentials that will allow you to perform the API calls they wrap.

Installation

Commerce Layer React Components are available as an npm package:

// npm
npm install @commercelayer/react-components

// yarn
yarn add @commercelayer/react-components

Authentication

All requests to Commerce Layer API must be authenticated with an OAuth2 bearer token. Hence, to use these components, you need to get a valid access token. Once you got it, you can pass it as prop — together with the endpoint of your Commerce Layer organization — to the CommerceLayer component, as follow:

<CommerceLayer
  accessToken="your-access-token"
  endpoint="https://yourdomain.commercelayer.io">

  {/* ... child components */}

</CommerceLayer>

This token will be used to authorize the API calls of all its child components. That's why the presence of (at least) one CommerceLayer component is mandatory — it must wrap every other component you need to use.

Please note that — in case you need to fetch data with different tokens (i.e. from different organizations or using apps with different roles and permissions) — nothing prevents you from putting as many CommerceLayer components you want in the same page.

You can check our documentation for more information about the available authorization flows and leverage Commerce Layer JS Auth to easily interact with our authentication API.

Import

You can use ES6 named import with every single component you plan to use (in addition to CommerceLayer one), as follow:

import { CommerceLayer, ...otherComponents } from '@commercelayer/react-components'

Check this summary table for the complete (and constantly updated) list of available components.

Usage

The code snippets below show how to put into action Commerce Layer React Components in some common use cases. Check the pages folder of this repository for more detailed examples.

Under the hood, our React components are built on top of Commerce Layer JS SDK — feel free to use it if you want to develop your custom ones.

Prices

This example shows how to use Commerce Layer React Components to display the prices of some SKUs, identified by their SKU codes:

import {
  CommerceLayer,
  PricesContainer,
  Price
} from '@commercelayer/react-components'

// your code [...]

<CommerceLayer accessToken="your-access-token" endpoint="https://yourdomain.commercelayer.io">
  <PricesContainer>
    <Price
      skuCode="BABYONBU000000E63E7412MX"
      className="your-custom-class"
      compareClassName="your-custom-class"
    />
    <Price
      skuCode="CANVASAU000000FFFFFF1824"
      className="your-custom-class"
      compareClassName="your-custom-class"
    />
    <Price
      skuCode="LSLEEVMM000000E63E74LXXX"
      className="your-custom-class"
      compareClassName="your-custom-class"
    />
  </PricesContainer>
</CommerceLayer>

// your code [...]

You can style the selling price and the full price as you like by passing the className and compareClassName props to the Price component. You can choose not to show the full price by passing showCompare={false} (default is true).

If you need to paginate the list of prices, pass the perPage prop to the PricesContainer component (default is 10) — to learn how pagination works, check our API reference or our SDK documentation.

Add to cart

This example shows how to use Commerce Layer React Components to implement the "add to cart" functionality on your page, showing the price of the chosen SKU, the possibility to select a variant and its quantity, the information about its availability, and the related button to perform the action:

import {
  CommerceLayer,
  OrderContainer,
  OrderStorage,
  ItemContainer,
  PricesContainer,
  Price,
  VariantsContainer,
  VariantSelector,
  QuantitySelector,
  AddToCartButton,
  AvailabilityContainer,
  AvailabilityTemplate
} from '@commercelayer/react-components'

// your code [...]

<CommerceLayer accessToken="your-access-token" endpoint="https://yourdomain.commercelayer.io">
  <OrderStorage persistKey="your-persist-key">
    <OrderContainer
      attributes={{
        cart_url: 'https://yourdomain.com/cart',
        return_url: 'https://yourdomain.com/return',
        privacy_url: 'https://yourdomain.com/privacy'
      }}>
      <ItemContainer>
        <PricesContainer>
          <Price skuCode="BABYONBU000000E63E746MXX" />
        </PricesContainer>
        <VariantsContainer>
          <VariantSelector
            placeholder="Select a size"
            options={[
              {
                label: '6 months',
                code: 'BABYONBU000000E63E746MXX',
                lineItem: {
                  name: 'your-item-name',
                  imageUrl: 'https://img.yourdomain.com/your-item-image.png'
                }
              },
              {
                label: '12 months',
                code: 'BABYONBU000000E63E7412MX',
                lineItem: {
                  name: 'your-item-name',
                  imageUrl: 'https://img.yourdomain.com/your-item-image.png'
                }
              }
            ]}
          />
        </VariantsContainer>
        <QuantitySelector />
        <AddToCartButton />
        <AvailabilityContainer>
          <AvailabilityTemplate />
        </AvailabilityContainer>
      </ItemContainer>
    </OrderContainer>
  </OrderStorage>
</CommerceLayer>

// your code [...]

For each variant you can define the custom name (i.e. its translation based on location) and image that will be shown on the corresponding line item, by passing the options prop to the VariantSelector component and properly setting the lineItem key — all these content data are usually taken from your CMS, since Commerce Layer doesn't manage any kind of content. You can change the type of input by passing type="radio" (default is select).

When you add a product to your shopping cart:

  • if there is an order stored in the Local Storage identified by a key that matches the persistKey property, a line item is created and it is associated with that order;
  • if no order in the Local Storage matches the persistKey property, a new order is created and stored.

A common best practice — especially for multi-country ecommerce — is to use as persistKey a key containing the country code, so that you have a different shopping cart for each country.

If you need to set some of the order object attributes at the moment of the order creation, pass to the optional prop attributes to the OrderContainer component.

Shopping cart

This example shows how to use Commerce Layer React Components to build a shopping cart UI, containing the items that are going to be purchased with all their information (image, name, quantity, price) and the option to possibly remove some of them:

import {
  CommerceLayer,
  OrderContainer,
  OrderStorage,
  LineItemsContainer,
  LineItemsCount,
  LineItem,
  LineItemImage,
  LineItemName,
  LineItemQuantity,
  LineItemAmount,
  LineItemRemoveLink,
  Errors
} from '@commercelayer/react-components'

// your code [...]

<CommerceLayer accessToken="your-access-token" endpoint="https://yourdomain.commercelayer.io">
  <OrderStorage persistKey="your-persist-key">
      <OrderContainer>
        <LineItemsContainer>
          <p className="your-custom-class">
            Your shopping cart contains <LineItemsCount /> items
          </p>
          <LineItem>
            <LineItemImage width={50} />
            <LineItemName />
            <LineItemQuantity max={10} />
            <Errors resource="lineItem" field="quantity" />
            <LineItemAmount />
            <LineItemRemoveLink />
          </LineItem>
        </LineItemsContainer>
      </OrderContainer>
  </OrderStorage>
</CommerceLayer>

// your code [...]

The Errors component lets you show the error (if present) returned by our API on a single attribute of a specific resource. You can customize the error message as you like by passing the messages prop to the component.

Cart summary

This example shows how to use Commerce Layer React Components to show a sample order summary with all the order line items (including discounts, shipping costs, taxes, and gift cards — if present) and totals:

import {
  CommerceLayer,
  OrderContainer,
  OrderStorage,
  SubTotalAmount,
  DiscountAmount,
  ShippingAmount,
  TaxesAmount,
  GiftCardAmount,
  TotalAmount,
  CheckoutLink
} from '@commercelayer/react-components'

// your code [...]

<CommerceLayer accessToken="your-access-token" endpoint="https://yourdomain.commercelayer.io">
  <OrderStorage persistKey="your-persist-key">
    <OrderContainer>
      <SubTotalAmount />
      <DiscountAmount />
      <ShippingAmount />
      <TaxesAmount />
      <GiftCardAmount />
      <TotalAmount />
      <CheckoutLink />
    </OrderContainer>
  </OrderStorage>
</CommerceLayer>

// your code [...]

You can change the amount format of each line of the summary by passing the format prop to the desired component (default is formatted).

The CheckoutLink component lets you proceed to checkout and links to the checkout URL configured on Commerce Layer (Settings → Markets).

List of components

These are the currently available Commerce Layer React Components.

Please note that not every Commerce Layer React component can be nested into any other one.

For each component, the table below shows its props and the list of the permitted children (if any):

NamePropsChildren
AddToCartButtondisabledlabelskuCodelineItem
AvailabilityContainerskuCodeAvailabilityTemplate
AvailabilityTemplateshowShippingMethodNametimeFormat
CheckoutLinklabel
CommerceLayeraccessTokenendpointGiftCardContainerOrderContainerPricesContainer
DiscountAmountclassNameformatidnamestyle
Errorsfieldmessagesresource
ExternalFunctionurlAddToCartButton
GiftCardonSubmitErrorsGiftCardCurrencySelectorGiftCardInputMetadataInputSubmitButton
GiftCardAmountclassNameformatidnamestyle
GiftCardContainerGiftCardErrors
GiftCardCurrencySelectorplaceholderrequiredvalue
GiftCardInputnameplaceholdertype
ItemContainerlineItemskuCodeAddToCartButtonAvailabilityContainerQuantitySelectorPricesContainerSkuOptionContainerVariantsContainer
LineItemtypeErrorsLineItemAmountLineItemImageLineItemNameLineItemOptionsLineItemQuantityLineItemRemoveLink
LineItemAmountclassNameformatidnamestyletype
LineItemImagewidth
LineItemName
LineItemOptionkeyClassNamekeyIdkeyStylenamevalueClassName
LineItemOptionstitle showNameskuOptionIdLineItemOption
LineItemQuantitydisabledmax
LineItemRemoveLinklabel
LineItemsContainerfiltersloaderLineItemLineItemsCount
LineItemsCountclassNameidnamestyle
MetadataInputnameonChangeplaceholdertype
OrderContainerattributesmetadataorderIdCheckoutLinkDiscountAmountGiftCardAmountGiftCardContainerItemContainerLineItemsContainerShippingAmountSubTotalAmountTaxesAmountTotalAmount
OrderStorageclearWhenPlacedpersistKeyOrderContainer
PricecompareClassNameshowCompareskuCode
PricesContainerfiltersloaderperPageskuCodePrice
QuantitySelectordisabledmaxminskuCodevalue
ShippingAmountclassNameformatidnamestyle
SkuOptionidSkuOptionInput
SkuOptionInputnameonChangeplaceholdertype
SkuOptionsContainerskuCodeSkuOption
SubmitButtonlabel
SubTotalAmountclassNameformatidnamestyle
TaxesAmountclassNameformatidnamestyle
TotalAmountclassNameformatidnamestyle
VariantsContainerfiltersskuCodeVariantSelector
VariantSelectorloadernameoptionsplacehoderskuCodetype

For more detailed information on each components (i.e. prop types and default values, required props, etc.), have a look at the configuration file src/config/components.ts.


License

This repository is published under the MIT license.

4.13.1-beta.6

4 days ago

4.13.1-beta.5

12 days ago

4.13.1-beta.3

15 days ago

4.13.1-beta.4

15 days ago

4.13.1-beta.2

18 days ago

4.13.1-beta.1

19 days ago

4.13.1-beta.0

23 days ago

4.13.0

26 days ago

4.12.0

1 month ago

4.12.0-beta.1

1 month ago

4.12.0-beta.0

2 months ago

4.11.3-beta.1

2 months ago

4.11.3

2 months ago

4.11.3-beta.0

2 months ago

4.11.2

2 months ago

4.11.2-beta.5

2 months ago

4.11.2-beta.6

2 months ago

4.11.2-beta.3

2 months ago

4.11.2-beta.4

2 months ago

4.11.2-beta.7

2 months ago

4.11.2-beta.8

2 months ago

4.11.2-beta.1

2 months ago

4.11.2-beta.2

2 months ago

4.11.1

2 months ago

4.11.2-beta.0

2 months ago

4.11.1-beta.3

2 months ago

4.11.1-beta.2

2 months ago

4.11.1-beta.1

2 months ago

4.11.0

2 months ago

4.10.2

2 months ago

4.10.1

3 months ago

4.10.0

3 months ago

4.10.0-beta.0

3 months ago

4.9.0

3 months ago

4.9.0-beta.4

3 months ago

4.9.0-beta.3

3 months ago

4.8.8

3 months ago

4.9.0-beta.2

4 months ago

4.9.0-beta.1

4 months ago

4.8.7

4 months ago

4.9.0-beta.0

4 months ago

4.8.6

4 months ago

4.8.6-beta.2

4 months ago

4.8.6-beta.1

4 months ago

4.8.6-beta.0

4 months ago

4.8.5-beta.0

4 months ago

4.8.4-beta.1

4 months ago

4.8.5

4 months ago

4.8.4-beta.0

4 months ago

4.8.4

4 months ago

4.8.3

5 months ago

4.8.2

5 months ago

4.8.1-beta.2

5 months ago

4.8.1

5 months ago

4.8.1-beta.1

5 months ago

4.8.1-beta.0

5 months ago

4.8.0

5 months ago

4.8.0-beta.4

5 months ago

4.7.10

6 months ago

4.7.11

6 months ago

4.8.0-beta.0

7 months ago

4.8.0-beta.1

7 months ago

4.8.0-beta.2

7 months ago

4.5.0-beta.3

9 months ago

4.8.0-beta.3

6 months ago

4.5.0-beta.4

9 months ago

4.5.0-beta.5

9 months ago

4.5.0-beta.6

9 months ago

4.5.0-beta.7

9 months ago

4.5.0-beta.8

9 months ago

4.5.0-beta.9

9 months ago

4.7.2-beta.0

7 months ago

4.7.7-beta.0

6 months ago

4.7.0

7 months ago

4.7.9

6 months ago

4.7.6

6 months ago

4.7.5

6 months ago

4.7.8

6 months ago

4.7.7

6 months ago

4.7.2

6 months ago

4.7.1

7 months ago

4.7.4

6 months ago

4.7.3

6 months ago

4.5.2-beta.2

8 months ago

4.5.2-beta.0

8 months ago

4.5.2-beta.1

8 months ago

4.6.0

7 months ago

4.7.4-beta.0

6 months ago

4.5.1

8 months ago

4.7.3-beta.1

6 months ago

4.7.3-beta.0

6 months ago

4.5.0-beta.16

8 months ago

4.5.0-beta.13

9 months ago

4.5.0-beta.11

9 months ago

4.5.0-beta.12

9 months ago

4.5.0-beta.10

9 months ago

4.7.1-beta.0

7 months ago

4.7.9-beta.0

6 months ago

4.7.5-beta.3

6 months ago

4.7.5-beta.2

6 months ago

4.7.9-beta.1

6 months ago

4.7.5-beta.1

6 months ago

4.7.5-beta.0

6 months ago

4.6.0-beta.1

7 months ago

4.6.0-beta.0

7 months ago

4.5.0-beta.0

11 months ago

4.5.0-beta.1

11 months ago

4.5.0-beta.2

11 months ago

4.4.1

12 months ago

4.4.0

12 months ago

4.4.3

12 months ago

4.4.2

12 months ago

4.4.4

12 months ago

4.4.4-beta.2

12 months ago

4.3.6

12 months ago

4.4.4-beta.0

12 months ago

4.4.0-beta.7

1 year ago

4.4.0-beta.8

1 year ago

4.4.0-beta.5

1 year ago

4.4.0-beta.6

1 year ago

4.4.0-beta.4

1 year ago

4.2.3-beta.1

1 year ago

4.2.3-beta.2

1 year ago

4.3.5-beta.0

1 year ago

4.3.5-beta.1

1 year ago

4.3.2

1 year ago

4.3.1

1 year ago

4.3.4

1 year ago

4.3.3

1 year ago

4.3.0

1 year ago

4.3.5

1 year ago

4.4.0-beta.2

1 year ago

4.2.3-beta.0

1 year ago

4.2.1-beta.7

1 year ago

4.2.2

1 year ago

4.2.1

1 year ago

4.2.1-beta.6

1 year ago

3.15.7

1 year ago

4.2.1-beta.5

1 year ago

4.2.1-beta.4

1 year ago

4.2.1-beta.3

1 year ago

4.2.1-beta.1

1 year ago

4.2.1-beta.0

1 year ago

4.2.0

1 year ago

4.0.1

1 year ago

4.0.0

2 years ago

4.0.0-beta.3

2 years ago

4.0.0-beta.2

2 years ago

4.0.0-beta.1

2 years ago

4.0.0-alpha.14

2 years ago

4.0.0-alpha.13

2 years ago

4.0.0-alpha.12

2 years ago

3.15.6

2 years ago

4.1.0-beta.1

1 year ago

4.1.0-beta.6

1 year ago

4.1.0-beta.7

1 year ago

4.1.0-beta.4

1 year ago

4.1.0-beta.5

1 year ago

4.1.0-beta.2

1 year ago

4.1.0-beta.3

1 year ago

4.1.0

1 year ago

4.1.2

1 year ago

4.1.1

1 year ago

3.15.4

2 years ago

3.15.3

2 years ago

3.15.5

2 years ago

4.0.0-alpha.9

2 years ago

4.0.0-alpha.7

2 years ago

4.0.0-alpha.8

2 years ago

4.0.0-alpha.6

2 years ago

4.0.0-alpha.11

2 years ago

4.0.0-alpha.10

2 years ago

3.15.2

2 years ago

4.0.0-alpha.5

2 years ago

4.0.0-alpha.3

2 years ago

4.0.0-alpha.4

2 years ago

3.15.0-beta.9

2 years ago

3.15.0-beta.13

2 years ago

3.15.0-beta.14

2 years ago

3.15.0-beta.10

2 years ago

3.15.0-beta.11

2 years ago

3.15.0-beta.12

2 years ago

3.15.0

2 years ago

3.15.1

2 years ago

4.0.0-alpha.1

2 years ago

4.0.0-alpha.2

2 years ago

3.15.0-beta.1

2 years ago

3.15.0-beta.4

2 years ago

3.15.0-beta.5

2 years ago

3.15.0-beta.2

2 years ago

3.15.0-beta.3

2 years ago

3.15.0-beta.8

2 years ago

3.15.0-beta.6

2 years ago

3.15.0-beta.7

2 years ago

3.13.1-beta.1

2 years ago

3.14.2-beta.1

2 years ago

3.14.1

2 years ago

3.14.0

2 years ago

3.14.1-beta.2

2 years ago

3.14.1-beta.3

2 years ago

3.14.1-alpha.1

2 years ago

3.0.0-alpha.1

2 years ago

3.0.0-alpha.3

2 years ago

3.0.0-alpha.2

2 years ago

3.14.0-beta.4

2 years ago

3.14.0-beta.3

2 years ago

3.14.0-beta.2

2 years ago

3.14.0-beta.1

2 years ago

3.14.1-beta.1

2 years ago

3.13.0

2 years ago

3.13.0-beta.5

2 years ago

3.13.0-beta.4

2 years ago

3.13.0-beta.7

2 years ago

3.13.0-beta.6

2 years ago

3.12.7

2 years ago

3.12.6

2 years ago

3.12.1

2 years ago

3.12.0

2 years ago

3.13.0-beta.1

2 years ago

3.13.0-beta.3

2 years ago

3.13.0-beta.2

2 years ago

3.12.3

2 years ago

3.12.2

2 years ago

3.12.5

2 years ago

3.12.4

2 years ago

3.11.2

2 years ago

3.11.1

2 years ago

3.9.3

2 years ago

3.9.2

2 years ago

3.9.1

2 years ago

3.9.0

2 years ago

3.9.5

2 years ago

3.9.4

2 years ago

3.8.0

2 years ago

3.10.0

2 years ago

3.8.2

2 years ago

3.8.1

2 years ago

3.11.0

2 years ago

3.7.0

2 years ago

3.6.2

2 years ago

3.6.1

2 years ago

3.6.4

2 years ago

3.6.3

2 years ago

3.6.0

2 years ago

3.5.2

2 years ago

3.5.1

2 years ago

3.5.0

2 years ago

3.4.4

2 years ago

3.4.3

2 years ago

3.2.2

2 years ago

3.2.1

2 years ago

3.2.0

2 years ago

3.2.4

2 years ago

3.2.3

2 years ago

3.1.0

2 years ago

3.0.1

2 years ago

3.0.0

2 years ago

2.53.0

2 years ago

2.53.1

2 years ago

2.53.2

2 years ago

2.53.3

2 years ago

2.49.8

2 years ago

2.52.1

2 years ago

2.52.0

2 years ago

2.51.2

2 years ago

2.51.3

2 years ago

2.51.0

2 years ago

2.51.1

2 years ago

3.4.0

2 years ago

3.4.2

2 years ago

3.4.1

2 years ago

2.50.3

2 years ago

2.50.4

2 years ago

2.50.5

2 years ago

2.50.6

2 years ago

2.50.0

2 years ago

2.50.1

2 years ago

2.50.2

2 years ago

3.3.0

2 years ago

2.50.7

2 years ago

2.46.5

2 years ago

2.46.4

2 years ago

2.46.7

2 years ago

2.49.5

2 years ago

2.49.6

2 years ago

2.49.7

2 years ago

2.49.1

2 years ago

2.49.2

2 years ago

2.49.3

2 years ago

2.49.4

2 years ago

2.49.0

2 years ago

2.48.2

2 years ago

2.48.3

2 years ago

2.48.0

2 years ago

2.48.1

2 years ago

2.47.0

2 years ago

2.47.1

2 years ago

2.46.1

3 years ago

2.46.3

3 years ago

2.46.2

3 years ago

2.46.0

3 years ago

2.45.0

3 years ago

2.45.2

3 years ago

2.45.1

3 years ago

2.45.4

3 years ago

2.45.3

3 years ago

3.0.0-beta.9

3 years ago

2.44.0

3 years ago

2.43.1

3 years ago

3.0.0-beta.10

3 years ago

3.0.0-beta.11

3 years ago

2.42.4

3 years ago

2.43.0

3 years ago

2.42.3

3 years ago

2.42.1

3 years ago

2.42.0

3 years ago

2.42.2

3 years ago

2.41.2

3 years ago

2.41.1

3 years ago

2.41.0

3 years ago

2.40.2

3 years ago

3.0.0-beta.8

3 years ago

2.40.1

3 years ago

2.40.0

3 years ago

2.39.1

3 years ago

2.38.0

3 years ago

2.37.1

3 years ago

2.39.0

3 years ago

2.37.0

3 years ago

2.36.0

3 years ago

2.35.0

3 years ago

3.0.0-beta.7

3 years ago

3.0.0-beta.6

3 years ago

3.0.0-beta.5

3 years ago

2.34.11

3 years ago

2.34.9

3 years ago

2.34.6

3 years ago

2.34.5

3 years ago

2.34.8

3 years ago

2.34.10

3 years ago

2.34.4

3 years ago

2.34.3

3 years ago

2.34.2

3 years ago

2.34.0

3 years ago

2.34.1

3 years ago

2.33.3

3 years ago

2.33.2

3 years ago

2.33.4

3 years ago

2.33.1

3 years ago

2.33.0

3 years ago

2.32.0

3 years ago

3.0.0-beta.3

3 years ago

3.0.0-beta.4

3 years ago

3.0.0-beta.1

3 years ago

3.0.0-beta.0

3 years ago

3.0.0-beta.2

3 years ago

2.31.0

3 years ago

2.29.2

3 years ago

2.29.1

3 years ago

2.30.0

3 years ago

2.29.0

3 years ago

2.27.1

3 years ago

2.28.0

3 years ago

2.25.0

3 years ago

2.27.0

3 years ago

2.24.1

3 years ago

2.24.0

3 years ago

2.26.0

3 years ago

2.23.0

3 years ago

2.19.0

3 years ago

2.19.1

3 years ago

2.17.0

3 years ago

2.15.0

3 years ago

2.13.0

3 years ago

2.22.1

3 years ago

2.20.0

3 years ago

2.22.0

3 years ago

2.22.7

3 years ago

2.22.6

3 years ago

2.22.3

3 years ago

2.22.2

3 years ago

2.22.5

3 years ago

2.22.4

3 years ago

2.12.0

3 years ago

2.18.1

3 years ago

2.12.5

3 years ago

2.18.0

3 years ago

2.12.3

3 years ago

2.16.0

3 years ago

2.12.4

3 years ago

2.12.1

3 years ago

2.14.0

3 years ago

2.12.2

3 years ago

2.21.0

3 years ago

2.11.1

3 years ago

2.11.0

3 years ago

2.10.1

3 years ago

2.10.0

3 years ago

2.9.0

3 years ago

2.9.1

3 years ago

2.8.0

3 years ago

2.7.0

3 years ago

2.6.0

3 years ago

2.5.2

3 years ago

2.5.1

3 years ago

2.5.0

3 years ago

2.4.0

3 years ago

2.3.1

3 years ago

2.3.0

3 years ago

2.2.2

3 years ago

2.2.1

3 years ago

2.2.0

3 years ago

2.1.3

3 years ago

2.1.2

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

2.0.0

3 years ago

1.7.0

3 years ago

1.6.1

3 years ago

1.6.0

3 years ago

1.5.3

4 years ago

1.5.2

4 years ago

1.5.1

4 years ago

1.5.0

4 years ago

1.4.0

4 years ago

1.3.0

4 years ago

1.2.6

4 years ago

1.2.5

4 years ago

1.2.4

4 years ago

1.2.3

4 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.2.0

4 years ago

1.1.0

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago